当我测量Java应用程序的吞吐量时,我发现随着时间的推移,性能提高了50%:
我相信随着JIT优化执行路径,性能会提高。
不保存JIT编译的原因是“JVM执行的优化不是静态的,而是动态的,基于数据模式和代码模式。很可能是这些数据模式将在应用程序的生命周期内发生变化,使缓存的优化不是最佳的。“
但是,我知道这些数据模式在我的应用程序生命周期内,甚至在多个应用程序生命周期内都不会发生变化。那么如何在HotSpot JVM中“保存”这些性能提升呢?
另请参阅相关的question和discussion。
答案 0 :(得分:6)
您可以尝试调整应用以使用Nailgun运行它。每次在Nailgun服务器(一个长期存在的JVM)上调用它时,都不会针对新的JVM调用您的应用程序。第二次调用你的应用程序时,nailgun JVM将优化你的类中的路径,因此应该比新的更快地执行。
答案 1 :(得分:3)
使用'-server'预先做更多事情。据我所知,Hotspot不允许在运行之间保存jit信息,因此-server是告诉它你想要它做什么的最简单方法。
答案 2 :(得分:2)
您确定它与CPU有关而与IO无关吗?我已经很多次看到过这种行为,当某个地方遇到冷缓存会使性能恶化。
答案 3 :(得分:2)
调整JIT的几个选项。
<强> 2。分层编译 请参阅标志 -XX:+ TieredCompilation
的详细信息第3。自定义CompileThreshold 控制使其符合JIT编译条件的函数调用次数。 请参阅标志 -XX:CompileThreshold 的详细信息。永远不要把它变成ZERO或ONE。您在此处的篡改可能会导致性能下降。 JVM为您提供了选项。 -server默认为10000。