Java 8 reserviert mindestens 1G für Metaspace trotz (Max) MetaspaceSize
Java 8 Reserven 1G für Metaspace nur nach dem Start. Es bedeutet, dass mindestens metaspace Größe ist 1G. Aber ich eingerichtet MetaspaceSize zu 300m und MaxMetaspaceSize zu 400m. Warum Java Reserven mehr, dann lass ich?
Java-Version
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
VM-Flags
$ jcmd 21689 VM.flags
21689:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=62914560 -XX:+ManagementServer -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1006632960 -XX:MaxMetaspaceSize=399998976 -XX:MaxNewSize=603979776 -XX:MetaspaceSize=299999232 -XX:MinHeapDeltaBytes=1048576 -XX:NativeMemoryTracking=summary -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC
NMT
[jetty9-proxy@bm01 bin]$ jcmd 21689 VM.native_memory
21689:
Native Memory Tracking:
Total: reserved=2769543KB, committed=1311159KB
- Class (reserved=1221904KB, committed=197904KB)
(classes #36543)
(malloc=3344KB #44041)
(mmap: reserved=1218560KB, committed=194560KB)
Und kurz nach dem start war es
Total: reserved=2402748KB, committed=150796KB
- Class (reserved=1056956KB, committed=7868KB)
(classes #1300)
(malloc=188KB #564)
(mmap: reserved=1056768KB, committed=7680KB)
InformationsquelleAutor der Frage Eugene To | 2015-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund, warum Java-Reserven 1G für Klassen, verbirgt sich in der Weise, wie es gelingt komprimiert Klasse Zeiger.
Die lange Antwort: Lesen Sie diese doc https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html
Die kurze Antwort: einrichten der richtigen Größe in 'CompressedClassSpaceSize' Eigenschaft -XX:CompressedClassSpaceSize=300m
InformationsquelleAutor der Antwort Eugene To
dies ist kein Speicher verwendet wird, nur der virtuelle Adressraum
Ist 197MB, nicht 1GB
Daher sind Sie nicht zeigen, dass java tatsächlich verbraucht 1 GB Speicher für Klassen-Daten, nur, dass es Reserven von 1 GB im Wert von address space.
InformationsquelleAutor der Antwort the8472