JVM heap + non-heap 是否等于 RSS?
结论:heap + non-heap ≤ RSS
JVM 堆内存(heap)主要用于存放 Java 对象实例。非堆内存(non-heap)主要包含永久代、代码缓存等。
而操作系统的 RSS(Resident Set Size)内存是当前进程实际使用的物理内存大小,包括:
堆内存
非堆内存
JVM 自身占用的内存开销
加载类和执行 native 代码占用的内存
堆外内存(DirectByteBuffer 等)
保留和缓冲等系统级内存占用
所以 JVM 的 heap+non-heap 内存只是进程整体 RSS 内存的一个子集。即:
heap + non-heap ≤ RSS
实际上,RSS 和 heap+non-heap 之间常常会有一定的差值,这个差值部分就是 JVM 自身和系统级别的内存占用。
综上,JVM 堆内存和非堆内存之和不完全等于进程的整体 RSS 内存。二者有包含和被包含的关系。
评论