[英]JVM Compile Time vs Code Cache
我一直在对我的应用程序进行基准测试并使用JMC进行分析。 我注意到在负载下,它执行了相当多的JIT编译。 如果我每秒发送大量事务,则编译时间会激增。 编译时间总是与针对应用程序的任何重负载测试成比例增长。
我还观察到代码缓存也慢慢上升。 所以我决定将代码缓存保留提高到500MB进行测试。 不好动! 现在它花费更多时间执行JIT。
然后我通过-XX:-UseCodeCacheFlushing
显式禁用了代码缓存刷新。 但是,我注意到代码缓存的峰值使用率大于当前大小。 这引出了几个问题:
在HotSpot JVM中,所有JIT编译的方法都保留在CodeCache中,直到它们被回收为止。 UseCodeCacheFlushing
影响冷(但仍然有效)编译方法的回收。 但是,CodeCache还可能包含过时或无效的方法(“僵尸”),即使使用-XX:-UseCodeCacheFlushing
,这些方法也会在下一个扫描周期进行清除。
有一个单独的JVM标志-XX:-MethodFlushing
来防止彻底扫描CodeCache,包括僵尸方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.