Java 8 réserves minimum 1G pour Metaspace malgré (Max)MetaspaceSize
Java 8 réserves 1G pour Metaspace juste après son démarrage. Cela signifie qu'au minimum, metaspace taille est de 1G. Mais j'ai configuré MetaspaceSize à 300m et MaxMetaspaceSize à 400m. Pourquoi Java réserve davantage de puis-je permettre?
Version De Java
$ 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 Drapeaux
$ 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)
Et juste après le début de la il était
Total: reserved=2402748KB, committed=150796KB
- Class (reserved=1056956KB, committed=7868KB)
(classes #1300)
(malloc=188KB #564)
(mmap: reserved=1056768KB, committed=7680KB)
- Je pense que vous nous montrant le Tas Java totaux, pas la MetaSpace totaux.
- J'ai enlevé Tas Java à partir des résultats de la commande
- Où voyez-vous que 1 go de figure concernant spécifiquement metaspace taille
- Je suppose que parce que les Classes sont en Metaspace dans Java 8. Ne suis-je pas le droit?
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle Java se réserve 1G pour les Classes se cache dans la manière dont il gère comprimé pointeurs de la classe.
La réponse longue: lire cette doc https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html
La réponse courte: le programme d'installation de la bonne taille en 'CompressedClassSpaceSize' propriété -XX:CompressedClassSpaceSize=300m
ce n'est pas la mémoire qui est utilisé, juste l'espace d'adressage virtuel
C'est 197MB, pas 1 GO
Par conséquent, vous n'êtes pas en montrant que java consomme réellement 1GO de mémoire pour les données de la classe, seulement qu'il se réserve vaut 1 go d'espace d'adressage.
CompressedClassSpaceSize
option.