我真的很头疼。我尝试了一切,到处搜索。它来 self 继承的测试 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。区别仅在于测试应用程序。
非常感谢任何想法或追求的途径。谢谢!
最佳答案
您可以考虑在像 Eclipse 这样的分析器下运行您的程序 TPTP或 YourKit并更准确地确定您的时间花在了哪里。这很可能会指出代码中的错误,或者不太可能指出库中的错误。然后,如果你还是想不通,把相关代码贴在这里,我们可以帮忙解决。
关于Java 反射性能在打包为 jar 时下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14574580/