我有一个java程序,它从数据库中读取大量输入数据,对其进行操作,然后将数据写回另一个数据库(使用ODBC驱动程序,Excel和访问数据库,在新的Windows 7计算机上)。该程序从eclipse运行大约需要17分钟,但是当我创建一个可执行的.jar文件时,它需要额外的10分钟才能运行(总共27个)。
我发现到目前为止缓慢的jar文件(通过搜索SO和谷歌)的两个原因是它们被压缩,并且写入命令提示符(或错误日志)比控制台需要更长的时间在日食。我尝试创建一个未压缩的jar文件,它只加速了大约10秒钟(这可能是完全随机的,因为运行时间大约相差30秒)。我在程序中只有大约10个System.out.println()
命令,因此不应该减慢它的速度。
关于是什么导致它运行得如此之慢的任何想法,如果有任何方法我可以再次加速?如果有任何其他可能相关的细节我应该包括在内,请告诉我。谢谢!
答案 0 :(得分:6)
在我的情况下,我的应用程序需要3秒才能在eclipse上运行,而当我从jar运行时需要2分钟。
我的错误是在将项目导出到runnable jar时选择"Package required libraries into jar"
。
我尝试了各种方法来缩短时间但没有任何帮助,除了..
如果项目中有其他maven依赖项或jar文件,则在将项目导出到jar时应使用"**Extract required libraries into generated jar**"
。
这在几秒钟内解决了我的问题。现在我的日食和jar文件花费相同的时间来运行应用程序,2秒。
希望这有助于新的斗争者。
问候。
答案 1 :(得分:4)
使用JAMon。 它是一个监控库,可以帮助您测量代码的执行时间。
在您的方法中添加一些监视代码后,在Eclipse中运行它并作为JAR文件,并比较结果。这应该允许您缩小搜索范围。
另外:检查是否使用与Eclipse相同的Java版本运行JAR文件(例如Java 1.4.x可能比1.6.x慢得多)。
答案 2 :(得分:3)
我有类似的问题。 shell的运行速度要慢一些,与控制台输出无关。我尝试设置JVM内存值,但它没有任何区别
解决方案是将包含所有JAR的ANT文件打包到外部文件夹中,使用"将所需的库复制到生成的JAR"旁边的子文件夹中。 " Runnable JAR文件导出中的选项"向导。然后使用-cp [YOURSUBFOLDER]命令行选项运行主JAR。
答案 3 :(得分:1)
您可以检查Java VM参数(如使用过的GC,最大内存等)。对于数据密集型应用程序,GC可能会减慢很多事情。
答案 4 :(得分:0)
是的,我有同样的问题。 我已经尝试过并找到了解决方案!
制作jar文件时,只需选择 “将所需的库打包到jar中” 。 该解决方案对我来说效果很好,希望对您也有用。