< prev index next >

src/hotspot/share/classfile/symbolTable.cpp

Print this page




 707   SymbolTableHash::BulkDeleteTask bdt(_local_table);
 708   if (!bdt.prepare(jt)) {
 709     return;
 710   }
 711 
 712   SymbolTableDeleteCheck stdc;
 713   SymbolTableDoDelete stdd;
 714   {
 715     TraceTime timer("Clean", TRACETIME_LOG(Debug, symboltable, perf));
 716     while (bdt.do_task(jt, stdc, stdd)) {
 717       bdt.pause(jt);
 718       {
 719         ThreadBlockInVM tbivm(jt);
 720       }
 721       bdt.cont(jt);
 722     }
 723     reset_has_items_to_clean();
 724     bdt.done(jt);
 725   }
 726 
 727   Atomic::add(stdc._processed, &_symbols_counted);
 728 
 729   log_debug(symboltable)("Cleaned " SIZE_FORMAT " of " SIZE_FORMAT,
 730                          stdd._deleted, stdc._processed);
 731 }
 732 
 733 void SymbolTable::check_concurrent_work() {
 734   if (_has_work) {
 735     return;
 736   }
 737   // We should clean/resize if we have
 738   // more items than preferred load factor or
 739   // more dead items than water mark.
 740   if (has_items_to_clean() || (get_load_factor() > PREF_AVG_LIST_LEN)) {
 741     log_debug(symboltable)("Concurrent work triggered, load factor: %f, items to clean: %s",
 742                            get_load_factor(), has_items_to_clean() ? "true" : "false");
 743     trigger_cleanup();
 744   }
 745 }
 746 
 747 void SymbolTable::do_concurrent_work(JavaThread* jt) {




 707   SymbolTableHash::BulkDeleteTask bdt(_local_table);
 708   if (!bdt.prepare(jt)) {
 709     return;
 710   }
 711 
 712   SymbolTableDeleteCheck stdc;
 713   SymbolTableDoDelete stdd;
 714   {
 715     TraceTime timer("Clean", TRACETIME_LOG(Debug, symboltable, perf));
 716     while (bdt.do_task(jt, stdc, stdd)) {
 717       bdt.pause(jt);
 718       {
 719         ThreadBlockInVM tbivm(jt);
 720       }
 721       bdt.cont(jt);
 722     }
 723     reset_has_items_to_clean();
 724     bdt.done(jt);
 725   }
 726 
 727   Atomic::add(&_symbols_counted, stdc._processed);
 728 
 729   log_debug(symboltable)("Cleaned " SIZE_FORMAT " of " SIZE_FORMAT,
 730                          stdd._deleted, stdc._processed);
 731 }
 732 
 733 void SymbolTable::check_concurrent_work() {
 734   if (_has_work) {
 735     return;
 736   }
 737   // We should clean/resize if we have
 738   // more items than preferred load factor or
 739   // more dead items than water mark.
 740   if (has_items_to_clean() || (get_load_factor() > PREF_AVG_LIST_LEN)) {
 741     log_debug(symboltable)("Concurrent work triggered, load factor: %f, items to clean: %s",
 742                            get_load_factor(), has_items_to_clean() ? "true" : "false");
 743     trigger_cleanup();
 744   }
 745 }
 746 
 747 void SymbolTable::do_concurrent_work(JavaThread* jt) {


< prev index next >