< prev index next >
src/hotspot/share/gc/g1/g1AllocRegion.hpp
Print this page
rev 56448 : imported patch 8220310.mut.0
rev 56449 : imported patch 8220310.mut.1
*** 26,46 ****
#define SHARE_GC_G1_G1ALLOCREGION_HPP
#include "gc/g1/heapRegion.hpp"
#include "gc/g1/g1EvacStats.hpp"
#include "gc/g1/g1HeapRegionAttr.hpp"
class G1CollectedHeap;
// A class that holds a region that is active in satisfying allocation
// requests, potentially issued in parallel. When the active region is
// full it will be retired and replaced with a new one. The
// implementation assumes that fast-path allocations will be lock-free
// and a lock will need to be taken when the active region needs to be
// replaced.
! class G1AllocRegion {
private:
// The active allocating region we are currently allocating out
// of. The invariant is that if this object is initialized (i.e.,
// init() has been called and release() has not) then _alloc_region
--- 26,47 ----
#define SHARE_GC_G1_G1ALLOCREGION_HPP
#include "gc/g1/heapRegion.hpp"
#include "gc/g1/g1EvacStats.hpp"
#include "gc/g1/g1HeapRegionAttr.hpp"
+ #include "gc/g1/g1MemoryNodeManager.hpp"
class G1CollectedHeap;
// A class that holds a region that is active in satisfying allocation
// requests, potentially issued in parallel. When the active region is
// full it will be retired and replaced with a new one. The
// implementation assumes that fast-path allocations will be lock-free
// and a lock will need to be taken when the active region needs to be
// replaced.
! class G1AllocRegion : public CHeapObj<mtGC> {
private:
// The active allocating region we are currently allocating out
// of. The invariant is that if this object is initialized (i.e.,
// init() has been called and release() has not) then _alloc_region
*** 89,98 ****
--- 90,102 ----
// G1CollectedHeap::allocate_new_alloc_region() and tells it to try
// to allocate a new region even if the max has been reached.
HeapWord* new_alloc_region_and_allocate(size_t word_size, bool force);
protected:
+ // The memory node index this allocation region belongs to.
+ uint _node_index;
+
// Reset the alloc region to point a the dummy region.
void reset_alloc_region();
// Perform a non-MT-safe allocation out of the given region.
inline HeapWord* allocate(HeapRegion* alloc_region,
*** 129,139 ****
virtual HeapRegion* allocate_new_region(size_t word_size, bool force) = 0;
virtual void retire_region(HeapRegion* alloc_region,
size_t allocated_bytes) = 0;
! G1AllocRegion(const char* name, bool bot_updates);
public:
static void setup(G1CollectedHeap* g1h, HeapRegion* dummy_region);
HeapRegion* get() const {
--- 133,143 ----
virtual HeapRegion* allocate_new_region(size_t word_size, bool force) = 0;
virtual void retire_region(HeapRegion* alloc_region,
size_t allocated_bytes) = 0;
! G1AllocRegion(const char* name, bool bot_updates, uint node_index);
public:
static void setup(G1CollectedHeap* g1h, HeapRegion* dummy_region);
HeapRegion* get() const {
*** 218,229 ****
protected:
virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
virtual void retire_region(HeapRegion* alloc_region, size_t allocated_bytes);
virtual size_t retire(bool fill_up);
public:
! MutatorAllocRegion()
! : G1AllocRegion("Mutator Alloc Region", false /* bot_updates */),
_wasted_bytes(0),
_retained_alloc_region(NULL) { }
// Returns the combined used memory in the current alloc region and
// the retained alloc region.
--- 222,233 ----
protected:
virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
virtual void retire_region(HeapRegion* alloc_region, size_t allocated_bytes);
virtual size_t retire(bool fill_up);
public:
! MutatorAllocRegion(uint node_index)
! : G1AllocRegion("Mutator Alloc Region", false /* bot_updates */, node_index),
_wasted_bytes(0),
_retained_alloc_region(NULL) { }
// Returns the combined used memory in the current alloc region and
// the retained alloc region.
*** 243,252 ****
--- 247,257 ----
// region is retired and set to NULL.
virtual HeapRegion* release();
virtual void init();
};
+
// Common base class for allocation regions used during GC.
class G1GCAllocRegion : public G1AllocRegion {
protected:
G1EvacStats* _stats;
G1HeapRegionAttr::region_type_t _purpose;
*** 254,265 ****
virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
virtual void retire_region(HeapRegion* alloc_region, size_t allocated_bytes);
virtual size_t retire(bool fill_up);
! G1GCAllocRegion(const char* name, bool bot_updates, G1EvacStats* stats, G1HeapRegionAttr::region_type_t purpose)
! : G1AllocRegion(name, bot_updates), _stats(stats), _purpose(purpose) {
assert(stats != NULL, "Must pass non-NULL PLAB statistics");
}
};
class SurvivorGCAllocRegion : public G1GCAllocRegion {
--- 259,271 ----
virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
virtual void retire_region(HeapRegion* alloc_region, size_t allocated_bytes);
virtual size_t retire(bool fill_up);
! G1GCAllocRegion(const char* name, bool bot_updates, G1EvacStats* stats,
! G1HeapRegionAttr::region_type_t purpose, uint node_index = G1MemoryNodeManager::AnyNodeIndex)
! : G1AllocRegion(name, bot_updates, node_index), _stats(stats), _purpose(purpose) {
assert(stats != NULL, "Must pass non-NULL PLAB statistics");
}
};
class SurvivorGCAllocRegion : public G1GCAllocRegion {
< prev index next >