【发布时间】:2018-07-13 19:19:22
【问题描述】:
我一直在对我的应用程序进行基准测试并使用 JMC 对其进行分析。我注意到在负载下,它会执行相当多的 JIT 编译。如果我每秒发送大量事务,编译时间就会激增。编译时间总是随着对应用程序的任何重负载测试成比例地增长。
我还观察到代码缓存也在缓慢上升。所以我决定将 Code Cache 预留提高到 500MB 进行测试。坏动作!现在它花费更多时间执行 JIT。
然后我通过-XX:-UseCodeCacheFlushing 明确禁用了代码缓存刷新。但是,我注意到峰值代码缓存使用量大于当前大小。这让我想到了几个问题:
- JVM 是否尝试缓存每个 JIT 编译?
- 为什么即使我禁用了刷新,峰值代码缓存大小仍大于当前大小?
- 是否存在在函数结束后自动删除的“临时”编译代码?
【问题讨论】:
标签: java jvm jit jvm-codecache