comparison src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp @ 941:8b46c4d82093

4957990: Perm heap bloat in JVM Summary: Treat ProfileData in MDO's as a source of weak, not strong, roots. Fixes the bug for stop-world collection -- the case of concurrent collection will be fixed separately. Reviewed-by: jcoomes, jmasa, kvn, never
author ysr
date Wed, 02 Sep 2009 00:04:29 -0700
parents 05f89f00a864
children 54b3b351d6f9
comparison
equal deleted inserted replaced
940:8624da129f0b 941:8b46c4d82093
153 inline void do_oop_nv(narrowOop* p) { PushAndMarkClosure::do_oop_work(p); } 153 inline void do_oop_nv(narrowOop* p) { PushAndMarkClosure::do_oop_work(p); }
154 bool do_header() { return true; } 154 bool do_header() { return true; }
155 Prefetch::style prefetch_style() { 155 Prefetch::style prefetch_style() {
156 return Prefetch::do_read; 156 return Prefetch::do_read;
157 } 157 }
158 // In support of class unloading
159 virtual const bool should_remember_mdo() const {
160 return false;
161 // return _should_remember_klasses;
162 }
163 virtual void remember_mdo(DataLayout* v);
158 }; 164 };
159 165
160 // In the parallel case, the revisit stack, the bit map and the 166 // In the parallel case, the revisit stack, the bit map and the
161 // reference processor are currently all shared. Access to 167 // reference processor are currently all shared. Access to
162 // these shared mutable structures must use appropriate 168 // these shared mutable structures must use appropriate
183 inline void do_oop_nv(narrowOop* p) { Par_PushAndMarkClosure::do_oop_work(p); } 189 inline void do_oop_nv(narrowOop* p) { Par_PushAndMarkClosure::do_oop_work(p); }
184 bool do_header() { return true; } 190 bool do_header() { return true; }
185 Prefetch::style prefetch_style() { 191 Prefetch::style prefetch_style() {
186 return Prefetch::do_read; 192 return Prefetch::do_read;
187 } 193 }
194 // In support of class unloading
195 virtual const bool should_remember_mdo() const {
196 return false;
197 // return _should_remember_klasses;
198 }
199 virtual void remember_mdo(DataLayout* v);
188 }; 200 };
189 201
190 // The non-parallel version (the parallel version appears further below). 202 // The non-parallel version (the parallel version appears further below).
191 class MarkRefsIntoAndScanClosure: public OopsInGenClosure { 203 class MarkRefsIntoAndScanClosure: public OopsInGenClosure {
192 private: 204 private:
301 MarkFromRootsClosure* parent); 313 MarkFromRootsClosure* parent);
302 virtual void do_oop(oop* p); 314 virtual void do_oop(oop* p);
303 virtual void do_oop(narrowOop* p); 315 virtual void do_oop(narrowOop* p);
304 inline void do_oop_nv(oop* p) { PushOrMarkClosure::do_oop_work(p); } 316 inline void do_oop_nv(oop* p) { PushOrMarkClosure::do_oop_work(p); }
305 inline void do_oop_nv(narrowOop* p) { PushOrMarkClosure::do_oop_work(p); } 317 inline void do_oop_nv(narrowOop* p) { PushOrMarkClosure::do_oop_work(p); }
318 // In support of class unloading
319 virtual const bool should_remember_mdo() const {
320 return false;
321 // return _should_remember_klasses;
322 }
323 virtual void remember_mdo(DataLayout* v);
324
306 // Deal with a stack overflow condition 325 // Deal with a stack overflow condition
307 void handle_stack_overflow(HeapWord* lost); 326 void handle_stack_overflow(HeapWord* lost);
308 private: 327 private:
309 inline void do_yield_check(); 328 inline void do_yield_check();
310 }; 329 };
338 Par_MarkFromRootsClosure* parent); 357 Par_MarkFromRootsClosure* parent);
339 virtual void do_oop(oop* p); 358 virtual void do_oop(oop* p);
340 virtual void do_oop(narrowOop* p); 359 virtual void do_oop(narrowOop* p);
341 inline void do_oop_nv(oop* p) { Par_PushOrMarkClosure::do_oop_work(p); } 360 inline void do_oop_nv(oop* p) { Par_PushOrMarkClosure::do_oop_work(p); }
342 inline void do_oop_nv(narrowOop* p) { Par_PushOrMarkClosure::do_oop_work(p); } 361 inline void do_oop_nv(narrowOop* p) { Par_PushOrMarkClosure::do_oop_work(p); }
362 // In support of class unloading
363 virtual const bool should_remember_mdo() const {
364 return false;
365 // return _should_remember_klasses;
366 }
367 virtual void remember_mdo(DataLayout* v);
368
343 // Deal with a stack overflow condition 369 // Deal with a stack overflow condition
344 void handle_stack_overflow(HeapWord* lost); 370 void handle_stack_overflow(HeapWord* lost);
345 private: 371 private:
346 inline void do_yield_check(); 372 inline void do_yield_check();
347 }; 373 };