< prev index next >
src/hotspot/share/memory/heap.cpp
Print this page
rev 54114 : 8219586: CodeHeap State Analytics processes dead nmethods
Reviewed-by: thartmann, eosterlund
*** 202,211 ****
--- 202,212 ----
bool CodeHeap::reserve(ReservedSpace rs, size_t committed_size, size_t segment_size) {
assert(rs.size() >= committed_size, "reserved < committed");
assert(segment_size >= sizeof(FreeBlock), "segment size is too small");
assert(is_power_of_2(segment_size), "segment_size must be a power of 2");
+ assert_locked_or_safepoint(CodeCache_lock);
_segment_size = segment_size;
_log2_segment_size = exact_log2(segment_size);
// Reserve and initialize space for _memory.
*** 250,259 ****
--- 251,262 ----
return true;
}
bool CodeHeap::expand_by(size_t size) {
+ assert_locked_or_safepoint(CodeCache_lock);
+
// expand _memory space
size_t dm = align_to_page_size(_memory.committed_size() + size) - _memory.committed_size();
if (dm > 0) {
// Use at least the available uncommitted space if 'size' is larger
if (_memory.uncommitted_size() != 0 && dm > _memory.uncommitted_size()) {
*** 280,289 ****
--- 283,293 ----
void* CodeHeap::allocate(size_t instance_size) {
size_t number_of_segments = size_to_segments(instance_size + header_size());
assert(segments_to_size(number_of_segments) >= sizeof(FreeBlock), "not enough room for FreeList");
+ assert_locked_or_safepoint(CodeCache_lock);
// First check if we can satisfy request from freelist
NOT_PRODUCT(verify());
HeapBlock* block = search_freelist(number_of_segments);
NOT_PRODUCT(verify());
*** 344,353 ****
--- 348,359 ----
return newb;
}
void CodeHeap::deallocate_tail(void* p, size_t used_size) {
assert(p == find_start(p), "illegal deallocation");
+ assert_locked_or_safepoint(CodeCache_lock);
+
// Find start of HeapBlock
HeapBlock* b = (((HeapBlock *)p) - 1);
assert(b->allocated_space() == p, "sanity check");
size_t actual_number_of_segments = b->length();
*** 360,369 ****
--- 366,377 ----
NOT_PRODUCT(verify());
}
void CodeHeap::deallocate(void* p) {
assert(p == find_start(p), "illegal deallocation");
+ assert_locked_or_safepoint(CodeCache_lock);
+
// Find start of HeapBlock
HeapBlock* b = (((HeapBlock *)p) - 1);
assert(b->allocated_space() == p, "sanity check");
guarantee((char*) b >= _memory.low_boundary() && (char*) b < _memory.high(),
"The block to be deallocated " INTPTR_FORMAT " is not within the heap "
*** 787,796 ****
--- 795,805 ----
tty->print_cr("The Heap");
}
void CodeHeap::verify() {
if (VerifyCodeCache) {
+ assert_locked_or_safepoint(CodeCache_lock);
size_t len = 0;
int count = 0;
for(FreeBlock* b = _freelist; b != NULL; b = b->link()) {
len += b->length();
count++;
< prev index next >