1.1 --- a/src/share/vm/utilities/hashtable.cpp Wed Nov 12 22:33:26 2008 -0800 1.2 +++ b/src/share/vm/utilities/hashtable.cpp Wed Nov 12 23:26:45 2008 -0800 1.3 @@ -43,9 +43,11 @@ 1.4 entry = _free_list; 1.5 _free_list = _free_list->next(); 1.6 } else { 1.7 - const int block_size = 500; 1.8 - if (_first_free_entry == _end_block) { 1.9 + if (_first_free_entry + _entry_size >= _end_block) { 1.10 + int block_size = MIN2(512, MAX2((int)_table_size / 2, (int)_number_of_entries)); 1.11 int len = _entry_size * block_size; 1.12 + len = 1 << log2_intptr(len); // round down to power of 2 1.13 + assert(len >= _entry_size, ""); 1.14 _first_free_entry = NEW_C_HEAP_ARRAY(char, len); 1.15 _end_block = _first_free_entry + len; 1.16 } 1.17 @@ -53,6 +55,7 @@ 1.18 _first_free_entry += _entry_size; 1.19 } 1.20 1.21 + assert(_entry_size % HeapWordSize == 0, ""); 1.22 entry->set_hash(hashValue); 1.23 return entry; 1.24 }