8065334: CodeHeap expansion fails although there is uncommitted memory
Summary: CodeHeap::expand_by() should commit remaining space if requested expansion size is too large.
Reviewed-by: kvn
--- a/hotspot/src/share/vm/memory/heap.cpp Thu Jan 21 22:23:22 2016 +0300
+++ b/hotspot/src/share/vm/memory/heap.cpp Fri Jan 22 12:37:32 2016 +0100
@@ -149,6 +149,10 @@
// 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()) {
+ dm = _memory.uncommitted_size();
+ }
char* base = _memory.low() + _memory.committed_size();
if (!_memory.expand_by(dm)) return false;
on_code_mapping(base, dm);