Mercurial > hg > graal-jvmci-8
comparison src/share/vm/memory/heapInspection.cpp @ 615:c6c601a0f2d6
6797870: Add -XX:+{HeapDump,PrintClassHistogram}{Before,After}FullGC
Summary: Call newly created CollectedHeap::dump_{pre,post}_full_gc before and after every stop-world full collection cycle on GenCollectedHeap and ParallelScavengeHeap. (Support for G1CollectedHeap forthcoming under CR 6810861.) Small modifications to existing heap dumping and class histogram implementation, especially to allow multiple on-the-fly histos/dumps by the VM thread during a single safepoint.
Reviewed-by: jmasa, alanb, mchung
author | ysr |
---|---|
date | Mon, 02 Mar 2009 16:37:04 -0800 |
parents | e9be0e04635a |
children | 7bb995fbd3c0 |
comparison
equal
deleted
inserted
replaced
598:1fa16c3565be | 615:c6c601a0f2d6 |
---|---|
231 } | 231 } |
232 | 232 |
233 size_t missed_count() { return _missed_count; } | 233 size_t missed_count() { return _missed_count; } |
234 }; | 234 }; |
235 | 235 |
236 void HeapInspection::heap_inspection(outputStream* st) { | 236 void HeapInspection::heap_inspection(outputStream* st, bool need_prologue) { |
237 ResourceMark rm; | 237 ResourceMark rm; |
238 HeapWord* ref; | 238 HeapWord* ref; |
239 | 239 |
240 CollectedHeap* heap = Universe::heap(); | 240 CollectedHeap* heap = Universe::heap(); |
241 bool is_shared_heap = false; | 241 bool is_shared_heap = false; |
242 switch (heap->kind()) { | 242 switch (heap->kind()) { |
243 case CollectedHeap::G1CollectedHeap: | 243 case CollectedHeap::G1CollectedHeap: |
244 case CollectedHeap::GenCollectedHeap: { | 244 case CollectedHeap::GenCollectedHeap: { |
245 is_shared_heap = true; | 245 is_shared_heap = true; |
246 SharedHeap* sh = (SharedHeap*)heap; | 246 SharedHeap* sh = (SharedHeap*)heap; |
247 sh->gc_prologue(false /* !full */); // get any necessary locks, etc. | 247 if (need_prologue) { |
248 sh->gc_prologue(false /* !full */); // get any necessary locks, etc. | |
249 } | |
248 ref = sh->perm_gen()->used_region().start(); | 250 ref = sh->perm_gen()->used_region().start(); |
249 break; | 251 break; |
250 } | 252 } |
251 #ifndef SERIALGC | 253 #ifndef SERIALGC |
252 case CollectedHeap::ParallelScavengeHeap: { | 254 case CollectedHeap::ParallelScavengeHeap: { |
288 } else { | 290 } else { |
289 st->print_cr("WARNING: Ran out of C-heap; histogram not generated"); | 291 st->print_cr("WARNING: Ran out of C-heap; histogram not generated"); |
290 } | 292 } |
291 st->flush(); | 293 st->flush(); |
292 | 294 |
293 if (is_shared_heap) { | 295 if (need_prologue && is_shared_heap) { |
294 SharedHeap* sh = (SharedHeap*)heap; | 296 SharedHeap* sh = (SharedHeap*)heap; |
295 sh->gc_epilogue(false /* !full */); // release all acquired locks, etc. | 297 sh->gc_epilogue(false /* !full */); // release all acquired locks, etc. |
296 } | 298 } |
297 } | 299 } |
298 | 300 |