10

我有一个 java 程序,它从数据库中读取大量输入数据,对其进行操作,然后将数据写回另一个数据库(在新的 windows 7 机器上使用 ODBC 驱动程序、excel 和 access 数据库)。该程序从 Eclipse 运行大约需要 17 分钟,但是当我创建一个可执行的 .jar 文件时,它需要额外的 10 分钟才能运行(总共 27 分钟)。

到目前为止,我发现慢 jar 文件(通过搜索 SO 和 google)的两个原因是它们被压缩并且写入命令提示符(或错误日志)比 eclipse 中的控制台花费更长的时间。我尝试创建一个未压缩的 jar 文件,它只加速了大约 10 秒(这可能是完全随机的,因为运行时间无论如何都会变化大约 30 秒)。我在程序中只有大约 10 个System.out.println()命令,所以不应该减慢它的速度。

关于是什么导致它运行得这么慢的任何想法,如果有什么办法可以再次加快它的速度?让我知道是否有任何其他可能相关的细节我应该包括在内。谢谢!

4

5 回答 5

11

In my case, my application took 3 secs to run on eclipse while it took 2 mins when I run it from jar.
My mistake was to choose "Package required libraries into jar" while exporting my project into runnable jar.

I tried various ways to bring down the time but nothing helped, except..

If you have other maven dependencies or jar files in your project, you should use "**Extract required libraries into generated jar**" while exporting your project into a jar.

This solved my problem in seconds & now both my eclipse & jar file are taking same time to run the application, 2 secs.

Hope this helps the new strugglers.

Regards.

于 2015-10-23T01:55:18.537 回答
4

使用JAMon。它是一个监控库,可以帮助您测量代码的执行时间。

将一些监控代码添加到您的方法后,在 Eclipse 中以 JAR 文件的形式运行它,然后比较结果。这应该允许您缩小搜索范围。

另外:检查您是否正在使用 Eclipse 使用的相同 Java 版本运行您的 JAR 文件(例如,Java 1.4.x 可能比 1.6.x 慢得多)。

于 2012-06-06T18:12:42.930 回答
4

我有一个类似的问题。shell 的运行速度要慢几个数量级,并且与控制台输出无关。我尝试设置 JVM 内存值,但没有任何区别

解决方案是使用“可运行的 JAR 文件导出”向导中的“将所需的库复制到生成的 JAR 旁边的子文件夹中”选项将带有所有 JAR 的 ANT 文件打包到一个外部文件夹中。然后使用 -cp [YOURSUBFOLDER] 命令行选项运行主 JAR。

于 2017-01-04T17:17:38.067 回答
1

您可以检查 Java VM 参数(如使用的 GC、最大内存等)。对于数据密集型应用程序,GC 可能会大大降低速度。

于 2012-08-27T11:44:52.000 回答
0

是的,我有同样的问题。我已经实验并得到了解决方案!

只需在制作 jar 文件时选择“将所需的库打包到 jar 中” 。这个解决方案对我来说很好,希望这也适合你。

于 2020-09-01T16:16:20.367 回答