1.先上源码
size_t CodeHeap::header_size() {
return sizeof(HeapBlock);
}
这个函数的意义为获取heapBlock的大小,在hot spot虚拟机中,java堆底层为分块实现的。
CodeHeap::CodeHeap() {
_number_of_committed_segments = 0;
_number_of_reserved_segments = 0;
_segment_size = 0;
_log2_segment_size = 0;
_next_segment = 0;
_freelist = NULL;
_freelist_segments = 0;
}
构造函数,主要包括以下这么几项
1._number_of_committed_segments 已经提交的段的数量
2._number_of_reserved_segments 保留段的数量
3._segment_size 段的大小
4._log2_segment_size log2段大小
5._next_segment下一个段
7.释放
void CodeHeap::mark_segmap_as_free(size_t beg, size_t end) {
assert(0 <= beg && beg < _number_of_committed_segments, "interval begin out of bounds");
assert(beg < end && end <= _number_of_committed_segments, "interval end out of bounds");
// setup _segmap pointers for faster indexing
address p = (address)_segmap.low() + beg;
address q = (address)_segmap.low() + end;
// initialize interval
while (p < q) *p++ = 0xFF;
}
这个函数作用将一段内存地址标记为free
核心代码为 while (p < q) *p++ = 0xFF;