usegcoverheadlimit java jvm jvm-arguments jvm-hotspot

usegcoverheadlimit - Java 8 reserva un mínimo de 1G para Metaspace a pesar de(Máx) MetaspaceSize



java jvm options (2)

Java 8 reserva 1G para Metaspace justo después de que comience. Significa que el tamaño mínimo del metaspace es 1G. Pero configuré MetaspaceSize a 300 my MaxMetaspaceSize a 400 m. ¿Por qué Java se reserva más de lo que permito?

Versión 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)

Banderas VM

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

Y justo después de comenzar fue

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


Clase (reservada = 1221904KB

esto no es memoria que se está usando, solo espacio de direcciones virtuales

cometido = 197904KB

Eso es 197MB, no 1GB

Por lo tanto, no está demostrando que java en realidad consume 1 GB de memoria para datos de clase, solo que reserva 1 GB de espacio de direcciones.