2015-06-26 14 views
20

Java 8, başladıktan hemen sonra Metaspace için 1G ayırır. Bu, minimum metaspace boyutunun 1G olduğu anlamına gelir. Ama MetaspaceSize 300m ve MaxMetaspaceSize 400m'ye kurdum. Neden Java daha fazla ayırıyor?Java 8, Metaspace'e rağmen minimum 1G (maksimum) MetaspaceSize

Java Sürüm

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

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

Ve sonra

Total: reserved=2402748KB, committed=150796KB  

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

sana düşünüyorum MetaSpace toplamları değil, Java Heap toplamlarını gösteriyor. –

+0

Java Heap'i komut sonuçlarından kaldırdım –

+0

Özellikle, – the8472

cevap

4
oldu başlatmak saklıdır

Sınıf (= 1221904KB

bu kullanılmakta olan bellek, yalnızca sanal adres alanı işlenen

değil =

1GB 197MB, değil 197904KB

Bu nedenle java'nın sınıf verileri için 1GB bellek tükettiğini göstermiyorsunuz, sadece 1 GB değerinde f adres alanı.

+0

Evet, haklısınız. Demek istediğim buydu. Üzgünüm, İngilizce benim ana dilim değil. Konuyu düzenleyeceğim. –

+0

Ama MetaspaceSize = 300m ve MaxMetaspaceSize = 400m kurduğum için çok fazla bellek ayırmamalı. Tahmin edilemeyen rezervasyonlar kötüdür. Bu VM'de başka JMV süreçlerim var ve bunları başlatamıyorum çünkü boş hafıza yok. –

+0

, fazla yer ayırmasına izin vermek için aşırı yüklemeyi açabilirsiniz. – the8472

İlgili konular