为什么我的.jar文件运行得比eclipse中的程序慢?

nlejzf6q  于 2022-10-15  发布在  Eclipse
关注(0)|答案(6)|浏览(403)

我有一个Java程序,可以从数据库读取大量输入数据,对其进行操作,然后将数据写回另一个数据库(在新的Windows7机器上,使用odbc驱动程序、Excel和Access数据库)。该程序从eclipse运行大约需要17分钟,但是当我创建一个可执行的.jar文件时,它需要额外的10分钟来运行(总共27分钟)。
到目前为止,我发现JAR文件速度慢的两个原因(通过搜索so和google)是因为它们是压缩的,写入命令提示符(或错误日志)所需的时间比eclipse中的控制台长得多。我尝试创建一个未压缩的JAR文件,它的速度只加快了大约10秒(这可能完全是随机的,因为无论如何运行时间都会有大约30秒的变化)。我在程序中只有大约10个System.out.println()命令,所以这应该不会使它变慢太多。
你知道是什么原因导致它运行得这么慢吗?有没有什么方法可以让它再次加速?让我知道,如果有任何其他相关的细节,我应该包括。谢谢!

8oomwypt

8oomwypt1#

在我的例子中,我的应用程序在eclipse上运行花了3秒,而我在JAR上运行它花了2分钟。
我的错误是在将项目导出到Runnable JAR时选择了"Package required libraries into jar"
我试了各种方法来缩短时间,但都无济于事,除了
如果您的项目中有其他maven依赖项或JAR文件,则在将项目导出到JAR时应使用"**Extract required libraries into generated jar**"
这在几秒钟内解决了我的问题&现在我的eclipse和jar文件运行应用程序所用的时间是2秒。
希望这对新的奋斗者有所帮助。
向你问好。

jmo0nnb3

jmo0nnb32#

使用JAMon。它是一个监控库,将帮助您测量代码的执行时间。
在向方法中添加一些监视代码之后,在Eclipse中以JAR文件的形式运行它,并比较结果。这应该可以让您缩小搜索范围。
另外:检查您是否正在运行您的JAR文件,其Java版本与Eclipse使用的版本相同(例如,Java 1.4.x可能比1.6.x慢得多)。

bvpmtnay

bvpmtnay3#

我也遇到过类似的问题。外壳的运行速度慢了几个数量级,而且它与控制台输出无关。我尝试设置JVM内存值,但没有任何影响
解决方案是使用“Runnable JAR文件导出”向导中的“将所需的库复制到生成的JAR旁边的子文件夹”选项,将包含所有JAR的ANT文件打包到一个外部文件夹中。然后使用-cp[YOURSUBFOLDER]命令行选项运行主JAR。

eagi6jfj

eagi6jfj4#

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

tcomlyy6

tcomlyy65#

是的,我也有同样的问题。我已经尝试过了,并得到了一个解决方案!
只需在制作JAR文件时选择*“将所需的库打包到JAR中”*即可。这个解决方案在我身上运作得很好,希望这也能为你服务。

zdwk9cvp

zdwk9cvp6#

我也面临着同样的问题。eclipse运行应用程序需要5秒,而jar需要3分钟。这是由于我导出可运行的jar文件的方式所致。
这主要是在eclipse中作为可运行的jar导出的两种方法。

1)。将所需的库打包到JAR中

  • 这会将库的实际jar文件添加到jar中。这是最干净的,因为它用库JAR分隔应用程序类文件。
  • 缺点是这会使Runnable JAR执行得非常慢。
    2)。将所需的库解压缩到生成的JAR中
  • 这种方法将只从您的应用程序使用的库中提取实际的类文件,并将其包含在可运行的jar文件中。因此,您的Jar文件将包括您的应用程序类文件以及您的应用程序使用的所有库的类文件。
  • 此方法使Runnable JAR的运行方式与其在eclipse IDE中的运行方式相同。
  • 使用这种方式,我能够毫无延迟地运行JAR应用程序,并且完成时就像在eclipse IDE中运行一样,只需5秒。

话虽如此,最好的方法是使用maven构建工具。通过使用Maven,维护和处理第三方库非常容易。你可以看一看。
https://www.baeldung.com/executable-jar-with-maven

相关问题