我们可以通过 MemoryUsage(java.lang.management.MemoryUsage) 类的实例对象来获取 JVM 内存使用的详细信息。
MemoryUsage 对象包含了四个值:
值 | 描述 |
---|---|
init | JVM 启动时向操作系统申请的初始内存量(单位:字节)。JVM 可以多次向操作系统申请内存,也可以在用完后释放内存给操作系统。init 值可能不会显示声明。 |
used | 当前已使用的内存量(单位:字节) |
committed | JVM 可用内存量(单位:字节)。该值可能会随时间而变化(增长或下跌)。JVM 可以释放内存给操作系统,committed 值可能小于 init 值。 committed >= used 一定成立。 |
max | JVM 的最大内存量(单位:字节),该值可能不会显示声明。如果声明了该值,它也可能会随时间而变化,而且 used 和 committed 内存量一定小于等于 max。在 used <= max 但 used > committed 时,内存分配将会失败,既可用内存不足。 |
下面是一个内存池的示例(如下图):
+----------------------------------------------+
+//////////////// | +
+//////////////// | +
+----------------------------------------------+
|--------|
init
|---------------|
used
|---------------------------|
committed
|----------------------------------------------|
max