482 bool operator()(WeakHandle<vm_string_table_data>* val) {
483 ++_item;
484 oop tmp = val->peek();
485 if (tmp == NULL) {
486 ++_count;
487 return true;
488 } else {
489 return false;
490 }
491 }
492 };
493
494 void StringTable::clean_dead_entries(JavaThread* jt) {
495 StringTableHash::BulkDeleteTask bdt(_local_table);
496 if (!bdt.prepare(jt)) {
497 return;
498 }
499
500 StringTableDeleteCheck stdc;
501 StringTableDoDelete stdd;
502 bool interrupted = false;
503 {
504 TraceTime timer("Clean", TRACETIME_LOG(Debug, stringtable, perf));
505 while(bdt.do_task(jt, stdc, stdd)) {
506 bdt.pause(jt);
507 {
508 ThreadBlockInVM tbivm(jt);
509 }
510 bdt.cont(jt);
511 }
512 bdt.done(jt);
513 }
514 log_debug(stringtable)("Cleaned %ld of %ld", stdc._count, stdc._item);
515 }
516
517 void StringTable::check_concurrent_work() {
518 if (_has_work) {
519 return;
520 }
521
522 double load_factor = StringTable::get_load_factor();
|
482 bool operator()(WeakHandle<vm_string_table_data>* val) {
483 ++_item;
484 oop tmp = val->peek();
485 if (tmp == NULL) {
486 ++_count;
487 return true;
488 } else {
489 return false;
490 }
491 }
492 };
493
494 void StringTable::clean_dead_entries(JavaThread* jt) {
495 StringTableHash::BulkDeleteTask bdt(_local_table);
496 if (!bdt.prepare(jt)) {
497 return;
498 }
499
500 StringTableDeleteCheck stdc;
501 StringTableDoDelete stdd;
502 {
503 TraceTime timer("Clean", TRACETIME_LOG(Debug, stringtable, perf));
504 while(bdt.do_task(jt, stdc, stdd)) {
505 bdt.pause(jt);
506 {
507 ThreadBlockInVM tbivm(jt);
508 }
509 bdt.cont(jt);
510 }
511 bdt.done(jt);
512 }
513 log_debug(stringtable)("Cleaned %ld of %ld", stdc._count, stdc._item);
514 }
515
516 void StringTable::check_concurrent_work() {
517 if (_has_work) {
518 return;
519 }
520
521 double load_factor = StringTable::get_load_factor();
|