< 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 >