comparison src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp @ 993:54b3b351d6f9

Merge
author jrose
date Wed, 23 Sep 2009 23:56:15 -0700
parents 148e5441d916 8b46c4d82093
children 2a1472c30599
comparison
equal deleted inserted replaced
992:6a8ccac44f41 993:54b3b351d6f9
480 480
481 _marking_stack = new (ResourceObj::C_HEAP) GrowableArray<oop>(4000, true); 481 _marking_stack = new (ResourceObj::C_HEAP) GrowableArray<oop>(4000, true);
482 482
483 int size = SystemDictionary::number_of_classes() * 2; 483 int size = SystemDictionary::number_of_classes() * 2;
484 _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray<Klass*>(size, true); 484 _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray<Klass*>(size, true);
485 // (#klass/k)^2, for k ~ 10 appears a better setting, but this will have to do for
486 // now until we investigate a more optimal setting.
487 _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray<DataLayout*>(size*2, true);
485 } 488 }
486 489
487 490
488 void PSMarkSweep::deallocate_stacks() { 491 void PSMarkSweep::deallocate_stacks() {
489 if (_preserved_oop_stack) { 492 if (_preserved_oop_stack) {
493 _preserved_oop_stack = NULL; 496 _preserved_oop_stack = NULL;
494 } 497 }
495 498
496 delete _marking_stack; 499 delete _marking_stack;
497 delete _revisit_klass_stack; 500 delete _revisit_klass_stack;
501 delete _revisit_mdo_stack;
498 } 502 }
499 503
500 void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) { 504 void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) {
501 // Recursively traverse all live objects and mark them 505 // Recursively traverse all live objects and mark them
502 EventMark m("1 mark object"); 506 EventMark m("1 mark object");
544 548
545 // Update subklass/sibling/implementor links of live klasses 549 // Update subklass/sibling/implementor links of live klasses
546 follow_weak_klass_links(); 550 follow_weak_klass_links();
547 assert(_marking_stack->is_empty(), "just drained"); 551 assert(_marking_stack->is_empty(), "just drained");
548 552
553 // Visit memoized mdo's and clear unmarked weak refs
554 follow_mdo_weak_refs();
555 assert(_marking_stack->is_empty(), "just drained");
556
549 // Visit symbol and interned string tables and delete unmarked oops 557 // Visit symbol and interned string tables and delete unmarked oops
550 SymbolTable::unlink(is_alive_closure()); 558 SymbolTable::unlink(is_alive_closure());
551 StringTable::unlink(is_alive_closure()); 559 StringTable::unlink(is_alive_closure());
552 560
553 assert(_marking_stack->is_empty(), "stack should be empty by now"); 561 assert(_marking_stack->is_empty(), "stack should be empty by now");