Mercurial > hg > truffle
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"); |