< prev index next >
src/share/vm/gc/g1/g1Allocator.hpp
Print this page
*** 324,333 ****
--- 324,336 ----
// regions. Such regions are not modifiable by GC, being neither
// scavenged nor compacted, or even marked in the object header.
// They can contain no pointers to non-archive heap regions,
class G1ArchiveAllocator : public CHeapObj<mtGC> {
protected:
+ bool _open; // An 'open' archive region may contain references pointing to
+ // non-archive heap region. GC can adjust pointers in 'open'
+ // archive region.
G1CollectedHeap* _g1h;
// The current allocation region
HeapRegion* _allocation_region;
*** 345,370 ****
// Allocate a new region for this archive allocator.
// Allocation is from the top of the reserved heap downward.
bool alloc_new_region();
public:
! G1ArchiveAllocator(G1CollectedHeap* g1h) :
_g1h(g1h),
_allocation_region(NULL),
_allocated_regions((ResourceObj::set_allocation_type((address) &_allocated_regions,
ResourceObj::C_HEAP),
2), true /* C_Heap */),
_summary_bytes_used(0),
_bottom(NULL),
_top(NULL),
! _max(NULL) { }
virtual ~G1ArchiveAllocator() {
assert(_allocation_region == NULL, "_allocation_region not NULL");
}
! static G1ArchiveAllocator* create_allocator(G1CollectedHeap* g1h);
// Allocate memory for an individual object.
HeapWord* archive_mem_allocate(size_t word_size);
// Return the memory ranges used in the current archive, after
--- 348,374 ----
// Allocate a new region for this archive allocator.
// Allocation is from the top of the reserved heap downward.
bool alloc_new_region();
public:
! G1ArchiveAllocator(G1CollectedHeap* g1h, bool open) :
_g1h(g1h),
_allocation_region(NULL),
_allocated_regions((ResourceObj::set_allocation_type((address) &_allocated_regions,
ResourceObj::C_HEAP),
2), true /* C_Heap */),
_summary_bytes_used(0),
_bottom(NULL),
_top(NULL),
! _max(NULL),
! _open(open) { }
virtual ~G1ArchiveAllocator() {
assert(_allocation_region == NULL, "_allocation_region not NULL");
}
! static G1ArchiveAllocator* create_allocator(G1CollectedHeap* g1h, bool open);
// Allocate memory for an individual object.
HeapWord* archive_mem_allocate(size_t word_size);
// Return the memory ranges used in the current archive, after
*** 387,408 ****
// Create the _archive_region_map which is used to identify archive objects.
static inline void enable_archive_object_check();
// Set the regions containing the specified address range as archive/non-archive.
! static inline void set_range_archive(MemRegion range, bool is_archive);
static inline bool is_archive_object(oop object);
private:
static bool _archive_check_enabled;
! static G1ArchiveRegionMap _archive_region_map;
! // Check if an object is in an archive region using the _archive_region_map.
! static inline bool in_archive_range(oop object);
! // Check if archive object checking is enabled, to avoid calling in_archive_range
// unnecessarily.
static inline bool archive_check_enabled();
};
#endif // SHARE_VM_GC_G1_G1ALLOCATOR_HPP
--- 391,420 ----
// Create the _archive_region_map which is used to identify archive objects.
static inline void enable_archive_object_check();
// Set the regions containing the specified address range as archive/non-archive.
! static inline void set_range_archive(MemRegion range, bool open);
+ // Check if the object is in closed archive
+ static inline bool is_closed_archive_object(oop object);
+ // Check if the object is in open archive
+ static inline bool is_open_archive_object(oop object);
+ // Check if the object is either in closed archive or open archive
static inline bool is_archive_object(oop object);
private:
static bool _archive_check_enabled;
! static G1ArchiveRegionMap _closed_archive_region_map;
! static G1ArchiveRegionMap _open_archive_region_map;
! // Check if an object is in a closed archive region using the _closed_archive_region_map.
! static inline bool in_closed_archive_range(oop object);
! // Check if an object is in open archive region using the _open_archive_region_map.
! static inline bool in_open_archive_range(oop object);
! // Check if archive object checking is enabled, to avoid calling in_open/closed_archive_range
// unnecessarily.
static inline bool archive_check_enabled();
};
#endif // SHARE_VM_GC_G1_G1ALLOCATOR_HPP
< prev index next >