src/share/vm/memory/heap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
7025742 Cdiff src/share/vm/memory/heap.cpp
src/share/vm/memory/heap.cpp
Print this page
*** 314,329 ****
return l;
}
size_t CodeHeap::largest_free_block() const {
size_t len = 0;
for (FreeBlock* b = _freelist; b != NULL; b = b->link()) {
if (b->length() > len)
len = b->length();
}
! return size(len);
}
// Free list management
FreeBlock *CodeHeap::following_block(FreeBlock *b) {
--- 314,336 ----
return l;
}
size_t CodeHeap::largest_free_block() const {
+ // First check unused space excluding free blocks.
+ size_t free_sz = size(_free_segments);
+ size_t unused = max_capacity() - allocated_capacity() - free_sz;
+ if (unused >= free_sz)
+ return unused;
+
+ // Now check largest free block.
size_t len = 0;
for (FreeBlock* b = _freelist; b != NULL; b = b->link()) {
if (b->length() > len)
len = b->length();
}
! return MAX2(unused, size(len));
}
// Free list management
FreeBlock *CodeHeap::following_block(FreeBlock *b) {
src/share/vm/memory/heap.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File