< prev index next >
src/share/vm/gc/g1/g1Allocator.hpp
Print this page
rev 12504 : 8171235: Move archive object code from G1MarkSweep into G1ArchiveAllocator
Reviewed-by:
*** 310,325 ****
virtual void flush_and_retire_stats();
virtual void waste(size_t& wasted, size_t& undo_wasted);
};
// G1ArchiveAllocator is used to allocate memory in archive
// 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:
G1CollectedHeap* _g1h;
// The current allocation region
HeapRegion* _allocation_region;
--- 310,332 ----
virtual void flush_and_retire_stats();
virtual void waste(size_t& wasted, size_t& undo_wasted);
};
+ // G1ArchiveRegionMap is a boolean array used to mark G1 regions as
+ // archive regions. This allows a quick check for whether an object
+ // should not be marked because it is in an archive region.
+ class G1ArchiveRegionMap : public G1BiasedMappedArray<bool> {
+ protected:
+ bool default_value() const { return false; }
+ };
+
// G1ArchiveAllocator is used to allocate memory in archive
// 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:
G1CollectedHeap* _g1h;
// The current allocation region
HeapRegion* _allocation_region;
*** 376,383 ****
--- 383,408 ----
// regions, including those still associated with this allocator.
void clear_used() {
_summary_bytes_used = 0;
}
+ // 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
< prev index next >