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

为什么java代码缓存的大小在增长?,java,performance,jvm-hotspot,code-caching,jvm-codecache,Java,Performance,Jvm Hotspot,Code Caching,Jvm Codecache,我有一个基本程序,它什么也不做,只是坐在那里等待输入: 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{ Buf

我有一个基本程序,它什么也不做,只是坐在那里等待输入:

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();
        }
    }
}
当我运行这个时:

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
我通过JConsole连接以查看以下内容:

这仅仅是因为核心java bytcode首先被编译了吗?当进程没有做任何事情时,codecache怎么会增加

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

我明白了:

所以。。。为什么会这样

另外,这是
java-version
的输出:

java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing)

我怀疑是
jconsole
本身造成了问题。或者更准确地说,jmxremote支持
jconsole
查看JVM内部的情况

我的忠告是:

  • 别担心。看起来它几乎达到了稳定状态

  • 如果这还不够好,那么让
    jconsole
    运行很长时间,观察内存使用量是否完全停止增长

  • 如果这还不够好,那么你可以试着分析一下。。。尽管追踪jmxremote代码中的小存储泄漏(有或没有源代码)可能是一项挑战


仅仅因为
main
线程没有做任何事情并不意味着JVM什么也没做。GC可能正在检查是否需要运行,并监视线程是否正在运行,以便JConsole能够工作。
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing)