JVM堆的管理者——CodeCache
JVM堆的管理者——CodeCache
1 CodeCache的作用
CodeCache是一个静态类,其内部成员全部是静态变量,这也意味着这些成员变量在程序加载并首次使用后即在内存中固定了位置。
2 关键成员
下面是一些重要的成员变量
2.1 堆(heap)
堆是在运行时中分配类对象或数组对象在内存中的区域。
在openjdk的hotspot中,所有的堆都继承于CHeapObj类
template <MEMFLAGS F> class CHeapObj
其中模板值为MemoryType的宏定义,即声明一个堆类的时,需要继承CHeapObj并指定所属类型,例如代码堆的声明如下
enum MemoryType {// Memory type by sub systems. It occupies lower byte....mtCode = 0x04, // memory for generated code...
}class CodeHeap : public CHeapObj<mtCode>
CodeCache管理着一系列的代码堆,下面是这些堆的定义
static GrowableArray<CodeHeap*>* _heaps;static GrowableArray<CodeHeap*>* _compiled_heaps;static GrowableArray<CodeHeap*>* _nmethod_heaps;static GrowableArray<CodeHeap*>* _allocable_heaps;
2.2 _low_bound和_hight_bound
这两个变量记录了整个CodeCache所管理区在内存中的低地址和高地址
