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


Java     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!