mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 10:04:42 +02:00
7025742: Can not use CodeCache::unallocated_capacity() with fragmented CodeCache
Use largest_free_block() instead of unallocated_capacity(). Reviewed-by: iveresov, never, ysr
This commit is contained in:
parent
84ef74286f
commit
fd6487f201
7 changed files with 28 additions and 15 deletions
|
@ -316,12 +316,19 @@ size_t CodeHeap::allocated_capacity() const {
|
|||
}
|
||||
|
||||
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 size(len);
|
||||
return MAX2(unused, size(len));
|
||||
}
|
||||
|
||||
// Free list management
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue