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