Java Memory Code Cache
作用范围
Code Cache 是 JVM 中特殊的内存,用于存放 JVM 动态生成的代码,最主要是 JIT 编译后的代码,根据热点代码生成优化后的机器码,存放在 Code Cache。
相关参数
Code Cache 主要参数有 4 个,分别介绍一下:
-XX:InitialCodeCacheSize
初始化缓存大小
-XX:ReservedCodeCacheSize
最大缓存大小
-XX:CodeCacheMinimumFreeSpace
当缓存可用大小不足这个值时,会进行 code cache full 处理
-XX:Xmaxjitcodesize
最大缓存大小
使用案例
-XX:InitialCodeCacheSize=512M 代表默认缓存大小为 512M。
-XX:ReservedCodeCacheSize=1024M 代表最大缓存大小为 1024M。
-XX:CodeCacheMinimumFreeSpace=50M 代表当可用缓存大小不足 50M 时,进行 code cache full 处理。
-Xmaxjitcodesize1024M 代表最大缓存大小为 1024M。
参数默认值
以下为默认值均为 Linux 平台下的默认值。
参数 | 默认值 | JDK 版本 |
---|---|---|
-XX:InitialCodeCacheSize | 2555904 | jdk1.8 |
-XX:ReservedCodeCacheSize | 251658240 | jdk1.8 |
-XX:CodeCacheMinimumFreeSpace | 512000 | jdk1.8 |
-XX:Xmaxjitcodesize | - | - |
注意事项
Xmaxjitcodesize 等价于 ReservedCodeCacheSize。
ReservedCodeCacheSize 不能大于 2G。
ReservedCodeCacheSize 不能小于 InitialCodeCacheSize。
ReservedCodeCacheSize 默认 48M,开启分层编译默认 240M。
触发 code cache full 后,会且仅会打印一次 CodeCache is full 的日志。
InitialCodeCacheSize 里的 block 时可以复用的,不能大于 ReservedCodeCacheSize。
实践问题
ReservedCodeCacheSize 大于 2G 会怎样?
程序报错,无法启动 JVM。
$ java -XX:ReservedCodeCacheSize=3G Test Invalid ReservedCodeCacheSize=3072M. Must be at most 2048M. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
ReservedCodeCacheSize 小于 InitialCodeCacheSize 会怎样?
程序报错,无法启动 JVM。
$ java -XX:ReservedCodeCacheSize=1024M -XX:InitialCodeCacheSize=2048M Test Invalid ReservedCodeCacheSize: 1048576K. Must be at least InitialCodeCacheSize=2097152K. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit
同时设置 Xmaxjitcodesize 和 ReservedCodeCacheSize 会怎样?
谁后设置以谁为准。
$ java -XX:ReservedCodeCacheSize=1024M -Xmaxjitcodesize2048M Test $ jps 14690 Test $ jinfo -flag ReservedCodeCacheSize 14690 -XX:ReservedCodeCacheSize=2147483648
$ java -Xmaxjitcodesize2048M -XX:ReservedCodeCacheSize=1024M Test $ jps 14723 Test $ jinfo -flag ReservedCodeCacheSize 14723 -XX:ReservedCodeCacheSize=1073741824
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!