Mercurial > hg > truffle
diff 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 |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Fri Sep 18 09:57:47 2009 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Wed Sep 23 23:56:15 2009 -0700 @@ -482,6 +482,9 @@ int size = SystemDictionary::number_of_classes() * 2; _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray<Klass*>(size, true); + // (#klass/k)^2, for k ~ 10 appears a better setting, but this will have to do for + // now until we investigate a more optimal setting. + _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray<DataLayout*>(size*2, true); } @@ -495,6 +498,7 @@ delete _marking_stack; delete _revisit_klass_stack; + delete _revisit_mdo_stack; } void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) { @@ -546,6 +550,10 @@ follow_weak_klass_links(); assert(_marking_stack->is_empty(), "just drained"); + // Visit memoized mdo's and clear unmarked weak refs + follow_mdo_weak_refs(); + assert(_marking_stack->is_empty(), "just drained"); + // Visit symbol and interned string tables and delete unmarked oops SymbolTable::unlink(is_alive_closure()); StringTable::unlink(is_alive_closure());