为什么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(); } } } 

当我运行这个:

 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连接看到这个:

codecache增加

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

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

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

我明白了:

codecache增加

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

PS这是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代码(包含或不包含源代码)中的小存储泄漏可能具有挑战性。