Mercurial > hg > graal-compiler
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 }; |