我这里真是让人头疼。我尝试了一切,到处搜索。它来自我继承的那个测试 JAR 的应用程序。
(它由一个 GUI 前端和一个执行实际检查的命令行应用程序组成。GUI 通过在其自身上启动一个新的 JVM [java -cp "itself.jar" com.different.mainClass] 来运行命令行应用程序。这是一个糟糕的设计,我知道,但可能是相关的。)
无论如何,这个程序包含一些嵌套在两个 for 循环中的反射调用。问题是当应用程序被 JARed 起来时,第一次反射调用每次迭代都需要一秒钟。但是当它从类中运行时,它需要几毫秒。
实际上,这意味着这个命令:
java -jar myjar.jar
需要几个小时。
这个命令:
java -cp "...[bunch of jars];myjar.jar" com.myclasses.main
需要几分钟。
被测试的 JAR 始终是一个 jar。不同之处仅在于测试应用程序。
非常感谢任何想法或追求的途径。谢谢!