我们使用 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.11 + -XX:ReservedCodeCacheSize=375m,时区=UTC+1

下一步是将 -XX:ReservedCodeCacheSize 增加到 512m,但大约 3 小时后,JVM CodeHeap“分析的 nmethods”(C1 优化代码)再次减少到大约 50 …
我有这个基本程序,除了坐在那里等待输入之外什么都不做:
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连接看到这个:

这只是因为核心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)
我明白了:

那么......为什么会这样呢?
PS这是输出java -version:
java version "1.6.0_37"
Java(TM) SE Runtime Environment …Run Code Online (Sandbox Code Playgroud)