Java / JVM(HotSpot):有没有办法在编译时保存JIT性能增益?

时间:2010-09-23 14:19:33

标签: java performance jvm compilation jit

当我测量Java应用程序的吞吐量时,我发现随着时间的推移,性能提高了50%:

  • 对于前100K消息,我每秒收到~3,000条消息
  • 对于第二个100K消息,我每秒收到约4,500条消息。

我相信随着JIT优化执行路径,性能会提高。

保存JIT编译的原因是“JVM执行的优化不是静态的,而是动态的,基于数据模式和代码模式。很可能是这些数据模式将在应用程序的生命周期内发生变化,使缓存的优化不是最佳的。“

但是,我知道这些数据模式在我的应用程序生命周期内,甚至在多个应用程序生命周期内都不会发生变化。那么如何在HotSpot JVM中“保存”这些性能提升呢?

另请参阅相关的questiondiscussion

4 个答案:

答案 0 :(得分:6)

您可以尝试调整应用以使用Nailgun运行它。每次在Nailgun服务器(一个长期存在的JVM)上调用它时,都不会针对新的JVM调用您的应用程序。第二次调用你的应用程序时,nailgun JVM将优化你的类中的路径,因此应该比新的更快地执行。

答案 1 :(得分:3)

使用'-server'预先做更多事情。据我所知,Hotspot不允许在运行之间保存jit信息,因此-server是告诉它你想要它做什么的最简单方法。

答案 2 :(得分:2)

您确定它与CPU有关而与IO无关吗?我已经很多次看到过这种行为,当某个地方遇到冷缓存会使性能恶化。

答案 3 :(得分:2)

调整JIT的几个选项。

<强> 1。课程数据共享 http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix64.60%2Fuser%2Fclassdatasharing.html

<强> 2。分层编译 请参阅标志 -XX:+ TieredCompilation

的详细信息

第3。自定义CompileThreshold 控制使其符合JIT编译条件的函数调用次数。 请参阅标志 -XX:CompileThreshold 的详细信息。永远不要把它变成ZERO或ONE。您在此处的篡改可能会导致性能下降。 JVM为您提供了选项。 -server默认为10000。