< prev index next >

src/hotspot/share/classfile/stringTable.cpp

Print this page
@@ -215,28 +215,20 @@
  
  size_t StringTable::item_added() {
    return Atomic::add(&_items_count, (size_t)1);
  }
  
- size_t StringTable::add_items_to_clean(size_t ndead) {
-   size_t total = Atomic::add(&_uncleaned_items_count, (size_t)ndead);
-   log_trace(stringtable)(
-      "Uncleaned items:" SIZE_FORMAT " added: " SIZE_FORMAT " total:" SIZE_FORMAT,
-      _uncleaned_items_count, ndead, total);
-   return total;
- }
- 
  void StringTable::item_removed() {
    Atomic::add(&_items_count, (size_t)-1);
  }
  
  double StringTable::get_load_factor() {
-   return (double)_items_count/_current_size;
+   return double(_items_count)/double(_current_size);
  }
  
  double StringTable::get_dead_factor() {
-   return (double)_uncleaned_items_count/_current_size;
+   return double(_uncleaned_items_count)/double(_current_size);
  }
  
  size_t StringTable::table_size() {
    return ((size_t)1) << _local_table->get_size_log2(Thread::current());
  }

@@ -447,11 +439,13 @@
      bdt.done(jt);
    }
    log_debug(stringtable)("Cleaned %ld of %ld", stdc._count, stdc._item);
  }
  
- void StringTable::check_concurrent_work() {
+ void StringTable::gc_notification(size_t dead_count) {
+   _uncleaned_items_count += dead_count;
+ 
    if (_has_work) {
      return;
    }
  
    double load_factor = StringTable::get_load_factor();

@@ -462,10 +456,11 @@
    if ((dead_factor > load_factor) ||
        (load_factor > PREF_AVG_LIST_LEN) ||
        (dead_factor > CLEAN_DEAD_HIGH_WATER_MARK)) {
      log_debug(stringtable)("Concurrent work triggered, live factor: %g dead factor: %g",
                             load_factor, dead_factor);
+     _uncleaned_items_count = 0;
      trigger_concurrent_work();
    }
  }
  
  void StringTable::do_concurrent_work(JavaThread* jt) {
< prev index next >