【发布时间】:2011-04-16 07:30:37
【问题描述】:
当我测量我的 Java 应用程序的吞吐量时,我发现随着时间的推移性能提高了 50%:
- 对于前 10 万条消息,我每秒收到约 3,000 条消息
- 对于第二个 100K 消息,我每秒收到约 4,500 条消息。
我相信性能会随着 JIT 优化执行路径而提高。
不保存 JIT 编译的原因是“JVM 执行的优化不是静态的,而是动态的,基于数据模式和代码模式。很可能是这些数据模式将在应用程序的生命周期内发生变化,导致缓存的优化不是最优的。”
但是,我知道这些数据模式在我的应用程序生命周期内,甚至在多个应用程序生命周期内都不会改变。那么如何在 HotSpot JVM 中“保存”这些性能提升呢?
另请参阅相关的question 和discussion。
【问题讨论】:
-
这是一个有点愚蠢的评论,但我还是要说出来只是为了帮助辩论 - 我和其他人一样有兴趣知道答案! :) 我猜 JVM 执行的某些优化将取决于正在处理的数据。除非您的数据相同(包括它到达的时间),否则每次执行的优化都可能不同。如果数据始终相同,那么您只需运行应用程序一次 :)
-
如果您知道虚拟机对您的代码进行了哪些优化,并且您知道数据模式不会改变,那么您是否可以使用已优化的知识并修改应用程序的逻辑反映它?
标签: java performance jvm compilation jit