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) {
|