2015-06-26 5 views
20

Java 8 riserva 1G per Metaspace subito dopo l'avvio. Significa che la dimensione minima del metaspace è 1G. Ma ho impostato MetaspaceSize a 300 me MaxMetaspaceSize a 400 m. Perché Java riserva più di quanto io permetto?Java 8 riserva almeno 1 G per Metaspace nonostante (Max) MetaspaceSize

Java versione

$ 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 Bandiere

$ 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

[[email protected] 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) 

E solo dopo l'inizio era

Total: reserved=2402748KB, committed=150796KB  

-      Class (reserved=1056956KB, committed=7868KB) 
          (classes #1300) 
          (malloc=188KB #564) 
          (mmap: reserved=1056768KB, committed=7680KB) 
+0

penso che tu ci stanno mostrando i totali di Java Heap, non i totali di MetaSpace. –

+0

Ho rimosso l'Heap Java dai risultati del comando –

+0

Dove vedi quella cifra da 1 GB specifica in relazione alla dimensione metaspace – the8472

risposta

4

Classe (riservato = 1221904KB

questo non è la memoria che viene utilizzato, solo spazio di indirizzi virtuali

commesso = 197904KB

Questo è 197MB, non 1GB

Quindi non stai mostrando che java consuma effettivamente 1 GB di memoria per i dati di classe, solo che riserva 1 GB di valore o f spazio degli indirizzi.

+0

Sì, hai ragione. Questo è ciò che intendevo. Spiacente, l'inglese non è la mia lingua madre. Modificherò l'argomento. –

+0

Ma non dovrebbe riservare così tanta memoria perché ho impostato MetaspaceSize = 300m e MaxMetaspaceSize = 400m. La prenotazione imprevedibile è cattiva. Ho altri processi JMV su quella VM e non posso avviarli perché non c'è memoria libera. –

+0

puoi semplicemente attivare l'overcommit per permetterti di riservare così tanto spazio. – the8472

Problemi correlati