comparison src/share/vm/gc_implementation/g1/g1MarkSweep.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
100 GenMarkSweep::_preserved_oop_stack = NULL; 100 GenMarkSweep::_preserved_oop_stack = NULL;
101 101
102 GenMarkSweep::_marking_stack = 102 GenMarkSweep::_marking_stack =
103 new (ResourceObj::C_HEAP) GrowableArray<oop>(4000, true); 103 new (ResourceObj::C_HEAP) GrowableArray<oop>(4000, true);
104 104
105 size_t size = SystemDictionary::number_of_classes() * 2; 105 int size = SystemDictionary::number_of_classes() * 2;
106 GenMarkSweep::_revisit_klass_stack = 106 GenMarkSweep::_revisit_klass_stack =
107 new (ResourceObj::C_HEAP) GrowableArray<Klass*>((int)size, true); 107 new (ResourceObj::C_HEAP) GrowableArray<Klass*>(size, true);
108 // (#klass/k)^2 for k ~ 10 appears a better fit, but this will have to do
109 // for now until we have a chance to work out a more optimal setting.
110 GenMarkSweep::_revisit_mdo_stack =
111 new (ResourceObj::C_HEAP) GrowableArray<DataLayout*>(size*2, true);
112
108 } 113 }
109 114
110 void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, 115 void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading,
111 bool clear_all_softrefs) { 116 bool clear_all_softrefs) {
112 // Recursively traverse all live objects and mark them 117 // Recursively traverse all live objects and mark them
139 // Follow code cache roots (has to be done after system dictionary, 144 // Follow code cache roots (has to be done after system dictionary,
140 // assumes all live klasses are marked) 145 // assumes all live klasses are marked)
141 CodeCache::do_unloading(&GenMarkSweep::is_alive, 146 CodeCache::do_unloading(&GenMarkSweep::is_alive,
142 &GenMarkSweep::keep_alive, 147 &GenMarkSweep::keep_alive,
143 purged_class); 148 purged_class);
144 GenMarkSweep::follow_stack(); 149 GenMarkSweep::follow_stack();
145 150
146 // Update subklass/sibling/implementor links of live klasses 151 // Update subklass/sibling/implementor links of live klasses
147 GenMarkSweep::follow_weak_klass_links(); 152 GenMarkSweep::follow_weak_klass_links();
148 assert(GenMarkSweep::_marking_stack->is_empty(), 153 assert(GenMarkSweep::_marking_stack->is_empty(),
149 "stack should be empty by now"); 154 "stack should be empty by now");
155
156 // Visit memoized MDO's and clear any unmarked weak refs
157 GenMarkSweep::follow_mdo_weak_refs();
158 assert(GenMarkSweep::_marking_stack->is_empty(), "just drained");
159
150 160
151 // Visit symbol and interned string tables and delete unmarked oops 161 // Visit symbol and interned string tables and delete unmarked oops
152 SymbolTable::unlink(&GenMarkSweep::is_alive); 162 SymbolTable::unlink(&GenMarkSweep::is_alive);
153 StringTable::unlink(&GenMarkSweep::is_alive); 163 StringTable::unlink(&GenMarkSweep::is_alive);
154 164