changeset 7137:e5668dcf12e9

8057818: collect allocation context statistics at gc pauses Reviewed-by: mikael, jmasa
author jcoomes
date Wed, 10 Sep 2014 13:01:13 -0700
parents fd9feb55481c
children c10b463abc6e de58d17d9848
files src/share/vm/gc_implementation/g1/concurrentMark.cpp src/share/vm/gc_implementation/g1/g1AllocationContext.hpp src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp
diffstat 5 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Sep 10 19:05:54 2014 +0000
+++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Sep 10 13:01:13 2014 -0700
@@ -3332,6 +3332,7 @@
   } else {
     g1_par_agg_task.work(0);
   }
+  _g1h->allocation_context_stats().update_at_remark();
 }
 
 // Clear the per-worker arrays used to store the per-region counting data
--- a/src/share/vm/gc_implementation/g1/g1AllocationContext.hpp	Wed Sep 10 19:05:54 2014 +0000
+++ b/src/share/vm/gc_implementation/g1/g1AllocationContext.hpp	Wed Sep 10 13:01:13 2014 -0700
@@ -41,4 +41,11 @@
   }
 };
 
+class AllocationContextStats: public StackObj {
+public:
+  inline void clear() { }
+  inline void update(bool full_gc) { }
+  inline void update_at_remark() { }
+};
+
 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1ALLOCATIONCONTEXT_HPP
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Wed Sep 10 19:05:54 2014 +0000
+++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp	Wed Sep 10 13:01:13 2014 -0700
@@ -3585,7 +3585,7 @@
   }
 }
 
-void G1CollectedHeap::gc_epilogue(bool full /* Ignored */) {
+void G1CollectedHeap::gc_epilogue(bool full) {
 
   if (G1SummarizeRSetStats &&
       (G1SummarizeRSetStatsPeriod > 0) &&
@@ -3602,6 +3602,7 @@
   // always_do_update_barrier = true;
 
   resize_all_tlabs();
+  allocation_context_stats().update(full);
 
   // We have just completed a GC. Update the soft reference
   // policy with the new heap occupancy
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Wed Sep 10 19:05:54 2014 +0000
+++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp	Wed Sep 10 13:01:13 2014 -0700
@@ -263,6 +263,9 @@
   // Class that handles the different kinds of allocations.
   G1Allocator* _allocator;
 
+  // Statistics for each allocation context
+  AllocationContextStats _allocation_context_stats;
+
   // PLAB sizing policy for survivors.
   PLABStats _survivor_plab_stats;
 
@@ -656,6 +659,8 @@
   // Determines PLAB size for a particular allocation purpose.
   size_t desired_plab_sz(GCAllocPurpose purpose);
 
+  inline AllocationContextStats& allocation_context_stats();
+
   // Do anything common to GC's.
   virtual void gc_prologue(bool full);
   virtual void gc_epilogue(bool full);
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp	Wed Sep 10 19:05:54 2014 +0000
+++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp	Wed Sep 10 13:01:13 2014 -0700
@@ -37,6 +37,10 @@
 
 // Inline functions for G1CollectedHeap
 
+inline AllocationContextStats& G1CollectedHeap::allocation_context_stats() {
+  return _allocation_context_stats;
+}
+
 // Return the region with the given index. It assumes the index is valid.
 inline HeapRegion* G1CollectedHeap::region_at(uint index) const { return _hrm.at(index); }