Java JVM内存类型

Java JVM内存类型,java,memory,architecture,jvm,monitoring,Java,Memory,Architecture,Jvm,Monitoring,我在做一个监控项目;我们让监控软件工作,并从服务器重新收集度量。一切正常,但我们需要一些关于JVM内存使用细节的信息。我们有一些具有不同内存类型的列。我们需要知道这些是什么: 堆 非堆 用法 高峰 科尔 我们得到了所有这些列的最大值(HeapMax、NonHeapMax、UsageMax、PeakMax和CollMax)以及使用(HeapUsed、NonHeapUsed、UsageUsed、PeakUsed和CollUsed) 我们知道什么是堆和非堆,但不知道用法、峰值和Coll 有人知道他

我在做一个监控项目;我们让监控软件工作,并从服务器重新收集度量。一切正常,但我们需要一些关于JVM内存使用细节的信息。我们有一些具有不同内存类型的列。我们需要知道这些是什么:

  • 非堆
  • 用法
  • 高峰
  • 科尔
我们得到了所有这些列的最大值(HeapMax、NonHeapMax、UsageMax、PeakMax和CollMax)以及使用(HeapUsed、NonHeapUsed、UsageUsed、PeakUsed和CollUsed)

我们知道什么是堆和非堆,但不知道用法、峰值和Coll

有人知道他们是什么吗


提前感谢。

用法:-可能是当前正在使用的内存(即已使用:在图像中)

Peak:-可能是该时间之前提交的内存(即提交:在图像中)

Coll:-可能是可以使用的最大内存(即图像中的Max:)

Max:在运行JMV的生命周期内是固定的

已使用和已提交:根据负载而变化

我附加了一个JConsole快照,其中列出了这些属性。

来自java链接:

MemoryUsage对象表示内存使用情况的快照。MemoryUsage类的实例通常由方法构造,这些方法用于获取有关Java虚拟机的单个内存池或Java虚拟机的堆或非堆内存的内存使用信息

MemorySage对象包含四个值:

init表示Java虚拟机在启动期间从操作系统请求内存管理的初始内存量(以字节为单位)

used表示当前使用的内存量(以字节为单位)

committed表示保证可供Java虚拟机使用的内存量(字节)。提交的内存量可能会随时间变化(增加或减少)

max表示可用于内存管理的最大内存量(以字节为单位)。其值可能未定义。如果已定义,最大内存量可能会随时间而变化

如果定义了max,则已使用和提交的内存量将始终小于或等于max


如果内存分配试图增加已用内存,从而使used>committed(即使已用JConsole快照在post中不可见),则内存分配可能会失败。我不知道为什么。但是您可以从JConsole或JVisualVM检查这些属性。