标签: jvm-codecache

Java 从 11.0.11 更新到 11.0.13 更改了 JVM 代码缓存行为,导致更多进程 CPU 使用率和奇怪的分析 nmethods 内存使用率

我们使用 Java 11.0.11 和 -XX:ReservedCodeCacheSize=375m 运行一个复杂的集群应用程序,并 24/7 附加相同的负载配置文件,无需任何重新启动。

在我们将 AdoptOpenJDK jdk-11.0.11+9 更新为 Temurin jdk-11.0.13+8 后,两者都使用 -XX:ReservedCodeCacheSize=375m,在我们的应用程序中没有任何代码更改,只是更新 Java,我们注意到以下变化:

Java 11.0.13 + -XX:ReservedCodeCacheSize=375m,时区=UTC+1 Java 11.0.13 + -XX:ReservedCodeCacheSize=375m

与

Java 11.0.11 + -XX:ReservedCodeCacheSize=375m,时区=UTC+1 Java 11.0.11 + -XX:ReservedCodeCacheSize=375m

下一步是将 -XX:ReservedCodeCacheSize 增加到 512m,但大约 3 小时后,JVM CodeHeap“分析的 nmethods”(C1 优化代码)再次减少到大约 50 …

java jvm jvm-hotspot jvm-codecache

6
推荐指数
1
解决办法
2418
查看次数

为什么java代码缓存大小在增长?

我有这个基本程序,除了坐在那里等待输入之外什么都不做:

import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Basic {
    public static void main(String[] args) throws Exception{
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input;
            input=br.readLine();
        }catch(IOException io){
            io.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Basic
Run Code Online (Sandbox Code Playgroud)

我通过JConsole连接看到这个:

codecache增加

这只是因为核心java bytcode最初被编译?当进程没有做任何事情时,如何增加codecache?

当我有这个版本(使用Thread.sleep):

public class Basic {
    public static void main(String[] args) throws Exception{
        while(true) {
            Thread.sleep(5000);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

codecache增加

那么......为什么会这样呢?

PS这是输出java -version:

java version "1.6.0_37"
Java(TM) SE Runtime Environment …
Run Code Online (Sandbox Code Playgroud)

java performance jvm-hotspot code-caching jvm-codecache

5
推荐指数
1
解决办法
3101
查看次数