JVM的内存
先放一张JVM的内存划分图,总体上可以分为堆和非堆(粗略划分,基于java8)
那么一个Java进程最大占用的物理内存为:
Max Memory = eden + survivor + old + String Constant Pool + Code cache + compressed class space + Metaspace + Thread stack(*thread num) + Direct + Mapped + JVM + Native Memory
堆和非堆内存
堆和非堆内存有以下几个概念:
init
表示JVM在启动时从操作系统申请内存管理的初始内存大小(以字节为单位)。JVM可能从操作系统请求额外的内存,也可以随着时间的推移向操作系统释放内存(经实际测试,这个内存并没有过主动释放)。这个init的值可能不会定义。
used
表示当前使用的内存量(以字节为单位)
committed
表示保证可供 Jvm使用的内存大小(以字节为单位)。 已提交内存的大小可能随时间而变化(增加或减少)。 JVM也可能向系统释放内存,导致已提交的内存可能小于 init,但是committe