codecache代码缓存区,主要存放JIT所编译的代码,同时还有Java所使用的本地方法代码也会存储在codecache中.不同的jvm、不同的启动方式codecache的默认值大小也不尽相同。
JVM 版本和启动方式 |
默认 codeCache大小 |
32-bit client, Java 8 |
32 MB |
32-bit server, Java 8* |
48M |
32-bit server with Tiered Compilation, Java 8 |
240 MB |
64-bit server, Java 8* |
48M |
64-bit server with Tiered Compilation, Java 8 |
240 MB |
32-bit client, Java 7 |
32 MB |
32-bit server, Java 7 |
48 MB |
32-bit server with Tiered Compilation, Java 7 |
96 MB |
64-bit server, Java 7 |
48 MB |
64-bit server with Tiered Compilation, Java 7 |
96 MB |
* jdk8中server模式默认采用分层编译方式,如果需要关闭分层编译,需要加上启动参数-XX:-TieredCompilation
相关参数
-XX:ReservedCodeCacheSize设置codeCache的size大小,-XX:+UseCodeCacheFlushing启用code cache的回收机制。
由于JIT是随着代码被调用的次数达到CompileThreshold之后进行的,因此,codecache使用也会随之增加,常见的问题就是,随着时间的推移应用占用CPU会随之增高,请求相应变慢等问题,这时就需要考虑codecache的问题了。
相关优化请参考:
https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/codecache.htm
http://blog.leanote.com/post/zenglingshu/%E4%B8%80%E4%B8%AART%E4%B8%8B%E9%99%8D%E7%9A%84%E5%A5%87%E6%80%AACase%5B%E8%BD%AC%5D