codecache代码缓存区,主要存放JIT所编译的代码,同时还有Java所使用的本地方法代码也会存储在codecache中.不一样的jvm、不一样的启动方式codecache的默认值大小也不尽相同。java
JVM 版本和启动方式缓存 |
默认 codeCache大小oracle |
32-bit client, Java 8app |
32 MBjvm |
32-bit server, Java 8*post |
48M优化 |
32-bit server with Tiered Compilation, Java 8spa |
240 MBcode |
64-bit server, Java 8*orm |
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