src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp

Print this page
rev 7147 : 8059758: Startup benchmark performance and footprint regressions with JDK-8038423
Summary: Changes in JDK-8038423 always initialize (zeroes out) virtual memory used for auxiliary data structures. This causes a footprint and performance regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything.
Reviewed-by: tbd


 155 };
 156 
 157 // The G1 STW is alive closure.
 158 // An instance is embedded into the G1CH and used as the
 159 // (optional) _is_alive_non_header closure in the STW
 160 // reference processor. It is also extensively used during
 161 // reference processing during STW evacuation pauses.
 162 class G1STWIsAliveClosure: public BoolObjectClosure {
 163   G1CollectedHeap* _g1;
 164 public:
 165   G1STWIsAliveClosure(G1CollectedHeap* g1) : _g1(g1) {}
 166   bool do_object_b(oop p);
 167 };
 168 
 169 class RefineCardTableEntryClosure;
 170 
 171 class G1RegionMappingChangedListener : public G1MappingChangedListener {
 172  private:
 173   void reset_from_card_cache(uint start_idx, size_t num_regions);
 174  public:
 175   virtual void on_commit(uint start_idx, size_t num_regions);
 176 };
 177 
 178 class G1CollectedHeap : public SharedHeap {
 179   friend class VM_CollectForMetadataAllocation;
 180   friend class VM_G1CollectForAllocation;
 181   friend class VM_G1CollectFull;
 182   friend class VM_G1IncCollectionPause;
 183   friend class VMStructs;
 184   friend class MutatorAllocRegion;
 185   friend class SurvivorGCAllocRegion;
 186   friend class OldGCAllocRegion;
 187   friend class G1Allocator;
 188   friend class G1DefaultAllocator;
 189   friend class G1ResManAllocator;
 190 
 191   // Closures used in implementation.
 192   template <G1Barrier barrier, G1Mark do_mark_object>
 193   friend class G1ParCopyClosure;
 194   friend class G1IsAliveClosure;
 195   friend class G1EvacuateFollowersClosure;




 155 };
 156 
 157 // The G1 STW is alive closure.
 158 // An instance is embedded into the G1CH and used as the
 159 // (optional) _is_alive_non_header closure in the STW
 160 // reference processor. It is also extensively used during
 161 // reference processing during STW evacuation pauses.
 162 class G1STWIsAliveClosure: public BoolObjectClosure {
 163   G1CollectedHeap* _g1;
 164 public:
 165   G1STWIsAliveClosure(G1CollectedHeap* g1) : _g1(g1) {}
 166   bool do_object_b(oop p);
 167 };
 168 
 169 class RefineCardTableEntryClosure;
 170 
 171 class G1RegionMappingChangedListener : public G1MappingChangedListener {
 172  private:
 173   void reset_from_card_cache(uint start_idx, size_t num_regions);
 174  public:
 175   virtual void on_commit(uint start_idx, size_t num_regions, bool zero_filled);
 176 };
 177 
 178 class G1CollectedHeap : public SharedHeap {
 179   friend class VM_CollectForMetadataAllocation;
 180   friend class VM_G1CollectForAllocation;
 181   friend class VM_G1CollectFull;
 182   friend class VM_G1IncCollectionPause;
 183   friend class VMStructs;
 184   friend class MutatorAllocRegion;
 185   friend class SurvivorGCAllocRegion;
 186   friend class OldGCAllocRegion;
 187   friend class G1Allocator;
 188   friend class G1DefaultAllocator;
 189   friend class G1ResManAllocator;
 190 
 191   // Closures used in implementation.
 192   template <G1Barrier barrier, G1Mark do_mark_object>
 193   friend class G1ParCopyClosure;
 194   friend class G1IsAliveClosure;
 195   friend class G1EvacuateFollowersClosure;