src/share/vm/utilities/hashtable.cpp

changeset 867
275a3b7ff0d6
parent 435
a61af66fc99e
child 905
ad8c8ca4ab0f
     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  }

mercurial