8215228: Use a constant hash table size in order to enable compiler optimization
authorjcbeyler
Tue, 11 Dec 2018 10:23:15 -0800
changeset 53035 0e5c83bf4ff7
parent 53034 de99beff5c0e
child 53036 d5a2a29ca589
8215228: Use a constant hash table size in order to enable compiler optimization Summary: Remove a field from KlassInfoTable to allow compiler optimizations Reviewed-by: phh, aph Contributed-by: zanglin5@jd.com
src/hotspot/share/memory/heapInspection.cpp
src/hotspot/share/memory/heapInspection.hpp
--- a/src/hotspot/share/memory/heapInspection.cpp	Mon Dec 17 11:37:40 2018 +0100
+++ b/src/hotspot/share/memory/heapInspection.cpp	Tue Dec 11 10:23:15 2018 -0800
@@ -168,14 +168,12 @@
 
 KlassInfoTable::KlassInfoTable(bool add_all_classes) {
   _size_of_instances_in_words = 0;
-  _size = 0;
   _ref = (HeapWord*) Universe::boolArrayKlassObj();
   _buckets =
     (KlassInfoBucket*)  AllocateHeap(sizeof(KlassInfoBucket) * _num_buckets,
        mtInternal, CURRENT_PC, AllocFailStrategy::RETURN_NULL);
   if (_buckets != NULL) {
-    _size = _num_buckets;
-    for (int index = 0; index < _size; index++) {
+    for (int index = 0; index < _num_buckets; index++) {
       _buckets[index].initialize();
     }
     if (add_all_classes) {
@@ -187,11 +185,11 @@
 
 KlassInfoTable::~KlassInfoTable() {
   if (_buckets != NULL) {
-    for (int index = 0; index < _size; index++) {
+    for (int index = 0; index < _num_buckets; index++) {
       _buckets[index].empty();
     }
     FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets);
-    _size = 0;
+    _buckets = NULL;
   }
 }
 
@@ -200,7 +198,7 @@
 }
 
 KlassInfoEntry* KlassInfoTable::lookup(Klass* k) {
-  uint         idx = hash(k) % _size;
+  uint         idx = hash(k) % _num_buckets;
   assert(_buckets != NULL, "Allocation failure should have been caught");
   KlassInfoEntry*  e   = _buckets[idx].lookup(k);
   // Lookup may fail if this is a new klass for which we
@@ -227,8 +225,8 @@
 }
 
 void KlassInfoTable::iterate(KlassInfoClosure* cic) {
-  assert(_size == 0 || _buckets != NULL, "Allocation failure should have been caught");
-  for (int index = 0; index < _size; index++) {
+  assert(_buckets != NULL, "Allocation failure should have been caught");
+  for (int index = 0; index < _num_buckets; index++) {
     _buckets[index].iterate(cic);
   }
 }
--- a/src/hotspot/share/memory/heapInspection.hpp	Mon Dec 17 11:37:40 2018 +0100
+++ b/src/hotspot/share/memory/heapInspection.hpp	Tue Dec 11 10:23:15 2018 -0800
@@ -234,7 +234,6 @@
 
 class KlassInfoTable: public StackObj {
  private:
-  int _size;
   static const int _num_buckets = 20011;
   size_t _size_of_instances_in_words;