我一直在基准我的应用程序,并与江铃对其进行分析。我注意到,在负载下,它会执行相当多的JIT编译的。如果我发送了大量的每秒事务,编译时间尖峰。在编译的时候总是对应用程序的任何重负载测试按比例增长。
我还注意到,代码缓存缓慢上升为好。所以我决定代码缓存储备500MB提升到测试。糟糕的动作!现在,它的花费更多的时间进行JIT。
然后,我明确禁用代码缓存刷新通过-XX:-UseCodeCacheFlushing
。然而,我注意到,峰值码缓存使用比当前的大小更大。这使我几个问题:
在热点JVM中CodeCache所有JIT编译的方法停留,直到它们被回收。UseCodeCacheFlushing
影响的冷(但仍然有效)编译的方法回收。然而,CodeCache还可以包含过时或无效的方法(“僵尸”),其受到吹扫在甚至与下一个扫描周期-XX:-UseCodeCacheFlushing
。
有一个单独的JVM标志-XX:-MethodFlushing
,以防止共扫CodeCache,包括僵尸方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句