java JVM HeapMemory中Used, Committed and Max的区别
首先要明确的是 used < committed < max,单位是 bytes;
init
JVM启动时从操作系统申请的初始内存,也即JVM参数中-Xms设置的值
used(使用的内存)
实际使用的内存,包括未被回收的不可达对象占用的内存,它可以比初始(init)内存小
committed(申请的内存)
操作系统层面为当前JVM进程保留的内存
可能等于或大于used内存;JVM可以从操作系统申请很多内存,但是不一定真正使用它,但是操作系统可以为java进程保留相关内存
可能小于init内存,因为JVM可以回收内存并将其归还给操作系统
如果JVM需要更多内存,它将尝试从操作系统申请,此时commited会变大
如果创建一个新对象,并且此时 used < committed,这时JVM不需要直接从操作系统申请内存,而是直接使用已经申请好的committed内存,确保新对象能创建成功
如果创建一个新对象,并且总内存使用量已经超过committed值,JVM在创建对象前需要向操作系统申请额外的内存,并且不保证能申请成功,可能出现OOM
max
JVM能从操作系统申请的最大内存,该值一般通过JVM参数-Xmx设置
操作系统可能不会为JVM分配这么多的内存,因为操作系统还要为其他进程保留一定的内存,此时可能会导致OOM
共 0 条评论