详解Native Memory Tracking 追踪区域分析

时间:2022-10-26 12:22:27
摘要:本篇将介绍NMT追踪区域的部分内存类型——Java heap、Class、Thread、Code 以及 GC。

本文分享自华为云社区《Native Memory Tracking 详解(2):追踪区域分析(一)》,作者:毕昇小助手。

本篇将介绍NMT追踪区域的部分内存类型——Java heap、Class、Thread、Code 以及 GC。

追踪区域内存类型

在上文中我们打印了 NMT 的相关报告,但想必大家初次看到报告的时候对其追踪的各个区域往往都是一头雾水,下面就让我们来简单认识下各个区域。

查看 JVM 中所设定的内存类型:

# hotspot/src/share/vm/memory/allocation.hpp
/*
 * Memory types
 */
enum MemoryType {
 // Memory type by sub systems. It occupies lower byte.
 mtJavaHeap          = 0x00,  // Java heap     //Java 堆
 mtClass             = 0x01,  // memory class for Java classes     //Java classes 使用的内存
 mtThread            = 0x02,  // memory for thread objects //线程对象使用的内存
 mtThreadStack       = 0x03,  
 mtCode              = 0x04,  // memory for generated code //编译生成代码使用的内存
 mtGC                = 0x05,  // memory for GC    //GC 使用的内存
 mtCompiler          = 0x06,  // memory for compiler  //编译器使用的内存
 mtInternal          = 0x07,  // memory used by VM, but does not belong to    //内部使用的类型
 // any of above categories, and not used for
 // native memory tracking
 mtOther             = 0x08,  // memory not used by VM  //不是 VM 使用的内存
 mtSymbol            = 0x09,  // symbol     //符号表使用的内存
 mtNMT               = 0x0A,  // memory used by native memory tracking    //NMT 自身使用的内存
 mtClassShared       = 0x0B,  // class data sharing  //共享类使用的内存
 mtChunk             = 0x0C,  // chunk that holds content of arenas //chunk用于缓存
 mtTest              = 0x0D,  // Test type for verifying NMT
 mtTracing           = 0x0E,  // memory used for Tracing
 mtNone              = 0x0F,  // undefined
 mt_number_of_types  = 0x10   // number of memory types (mtDontTrack
 // is not included as validate type)
};