应用性能管理 APM-JVM监控:内存指标图表

时间:2025-02-12 14:52:18

内存指标图表

图1所示,展示设置的时间段内某个实例的总内存、堆内存、非堆内存等JVM不同内存区域的最大值、分配值和使用情况的趋势,也展示设置的时间段内某个实例的垃圾收集堆的GC时间和GC次数趋势。

图1 内存指标图

JVM内存介绍

JVM区域总体分为Heap memory和Non-Heap memory。

  • Heap memory:堆是Java 虚拟机运行时数据区域,分配所有实例和数组的内存。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。Heap区分为Eden Space、Survivor Space和Tenured Space。
  • Non-Heap memory:Java 虚拟机管理堆之外的内存。Non-Heap区分为Code Cache、Permanent Space或Meta Space。

Java堆是垃圾收集器管理的主要区域,又称为Garbage Collection Heap,GC方式包括Full GC和Minor GC。

表1 内存区域说明

域名

说明

Eden Space

用于最初从线程池分配内存给大部分对象。

Survivor Space

用于保存在Eden区内存池中经过垃圾回收后没有被回收的对象。

Tenured Space

用于保持已经在Survivor区内存池中存在了一段时间的对象。

Code Cache

用于编译和保存本地代码的内存。

Permanent Space

用于保存虚拟机的静态数据,例如,类和方法对象。

Meta Space

用于保存本地化内存中类的元数据。Java 8之后Meta Space替代Permanent Space。

Direct Buffer

监控直接缓冲区的使用情况。

Full GC

当内存回收之后仍无法满足内存空间分配需求时, 对整个堆空间(新生代、老年代和永久代)进行垃圾收集。

Minor GC

当分配对象遇到内存不足时,对新生代空间(Eden区和Survivor区)进行垃圾收集。

JVM采用分代垃圾回收。在JVM的内存空间中把堆空间分为老年代和新生代。将大量(90%以上)创建后短期消亡的对象存储在新生代,而老年代中存放生命周期长久的实例对象。新生代空间分为Eden区和两个Survivor区。新对象首先分配在Eden区,Survivor区作为Eden区和Tenured区的缓冲,在Survivor区的对象经历若干次收集仍然存活的,就会被转移到老年区,如图2所示。

图2 内存区域图解

新生代共有两个Survivor区,分别用from和to指针指代,其中to指针指向空的Survivor区。

support.huaweicloud.com/usermanual-apm/apm_02_0038.html