当我测量Java应用程序的吞吐量时,我发现随着时间的推移,性能提高了50%:
- 对于前100K消息,我每秒收到大约3,000条消息
- 对于第二个100K消息,我每秒收到约4,500条消息。
我相信随着JIT优化执行路径,性能会提高。
给出的理由 不 保存JIT编译是“JVM执行的优化不是静态的,而是动态的,基于数据模式和代码模式。这些数据模式可能会在应用程序的生命周期内发生变化,从而减少缓存的优化比最佳。“
但是,我知道这些数据模式在我的应用程序生命周期内,甚至在多个应用程序生命周期内都不会改变。那么如何在HotSpot JVM中“保存”这些性能提升呢?
另见,相关 题 和 讨论。
你可以尝试调整你的应用程序来运行它 钉枪。每次在Nailgun服务器(一个长期存在的JVM)上调用它时,都不会针对新的JVM调用您的应用程序。第二次调用你的应用程序时,nailgun JVM将优化你的类中的路径,因此应该比新的更快地执行。
使用'-server'可以提前做更多事情。据我所知,Hotspot不允许在运行之间保存jit信息,因此-server是告诉它你想要它做什么的最简单方法。
您确定它与CPU有关而与IO无关吗?我已经多次看到过这种行为,当某个地方遇到冷缓存会使性能恶化。
调整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。永远不要把它变成零或一个。您在此处的篡改可能会导致性能下降。 JVM为您提供了选项。 -server默认为10000。