Ich habe dieses Basisprogramm, das nichts tut, aber es für die Eingabe wartet sitzen:Warum wächst die Cache-Größe für Java-Code?
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();
}
}
}
Und wenn ich dies auszuführen:
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
ich über JConsole verbinden, das sehen:
Ist das einfach, weil core java bytcode zuerst kompiliert wird? Wie kann der Codecache zunehmen, wenn der Prozess nichts tut?
Und wenn ich diese Version haben (die Thread.sleep
verwendet):
So ... warum ist das passiert:
public class Basic {
public static void main(String[] args) throws Exception{
while(true) {
Thread.sleep(5000);
}
}
}
ich diese bekommen?
P.S. dies ist die Ausgabe von 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)
Nur weil der 'main' Thread nichts macht, bedeutet das nicht, dass die JVM nichts tut. GC überprüft wahrscheinlich, ob es ausgeführt werden muss und Überwachungsthreads ausgeführt werden, damit JConsole funktionieren kann. – Jeffrey