src/share/vm/memory/referenceProcessor.hpp

Print this page
rev 2518 : [mq]: g1-reference-processing

*** 46,86 **** // (with appropriate modifications) to any "non-convex interval". // forward references class ReferencePolicy; class AbstractRefProcTaskExecutor; ! class DiscoveredList; class ReferenceProcessor : public CHeapObj { protected: // End of list marker static oop _sentinelRef; MemRegion _span; // (right-open) interval of heap // subject to wkref discovery bool _discovering_refs; // true when discovery enabled bool _discovery_is_atomic; // if discovery is atomic wrt // other collectors in configuration bool _discovery_is_mt; // true if reference discovery is MT. // If true, setting "next" field of a discovered refs list requires // write barrier(s). (Must be true if used in a collector in which // elements of a discovered list may be moved during discovery: for // example, a collector like Garbage-First that moves objects during a // long-term concurrent marking phase that does weak reference // discovery.) bool _discovered_list_needs_barrier; BarrierSet* _bs; // Cached copy of BarrierSet. bool _enqueuing_is_done; // true if all weak references enqueued bool _processing_is_mt; // true during phases when // reference processing is MT. int _next_id; // round-robin mod _num_q counter in // support of work distribution ! // For collectors that do not keep GC marking information // in the object header, this field holds a closure that // helps the reference processor determine the reachability // of an oop (the field is currently initialized to NULL for ! // all collectors but the CMS collector). BoolObjectClosure* _is_alive_non_header; // Soft ref clearing policies // . the default policy static ReferencePolicy* _default_soft_ref_policy; --- 46,125 ---- // (with appropriate modifications) to any "non-convex interval". // forward references class ReferencePolicy; class AbstractRefProcTaskExecutor; ! ! // List of discovered references. ! class DiscoveredList { ! public: ! DiscoveredList() : _len(0), _compressed_head(0), _oop_head(NULL) { } ! oop head() const { ! return UseCompressedOops ? oopDesc::decode_heap_oop_not_null(_compressed_head) : ! _oop_head; ! } ! HeapWord* adr_head() { ! return UseCompressedOops ? (HeapWord*)&_compressed_head : ! (HeapWord*)&_oop_head; ! } ! void set_head(oop o) { ! if (UseCompressedOops) { ! // Must compress the head ptr. ! _compressed_head = oopDesc::encode_heap_oop_not_null(o); ! } else { ! _oop_head = o; ! } ! } ! ! bool empty() const; ! ! size_t length() { return _len; } ! void set_length(size_t len) { _len = len; } ! void inc_length(size_t inc) { _len += inc; assert(_len > 0, "Error"); } ! void dec_length(size_t dec) { _len -= dec; } ! ! private: ! // Set value depending on UseCompressedOops. This could be a template class ! // but then we have to fix all the instantiations and declarations that use this class. ! oop _oop_head; ! narrowOop _compressed_head; ! size_t _len; ! }; class ReferenceProcessor : public CHeapObj { protected: // End of list marker static oop _sentinelRef; + MemRegion _span; // (right-open) interval of heap // subject to wkref discovery + bool _discovering_refs; // true when discovery enabled bool _discovery_is_atomic; // if discovery is atomic wrt // other collectors in configuration bool _discovery_is_mt; // true if reference discovery is MT. + // If true, setting "next" field of a discovered refs list requires // write barrier(s). (Must be true if used in a collector in which // elements of a discovered list may be moved during discovery: for // example, a collector like Garbage-First that moves objects during a // long-term concurrent marking phase that does weak reference // discovery.) bool _discovered_list_needs_barrier; + BarrierSet* _bs; // Cached copy of BarrierSet. bool _enqueuing_is_done; // true if all weak references enqueued bool _processing_is_mt; // true during phases when // reference processing is MT. int _next_id; // round-robin mod _num_q counter in // support of work distribution ! // For collectors that do not keep GC liveness information // in the object header, this field holds a closure that // helps the reference processor determine the reachability // of an oop (the field is currently initialized to NULL for ! // all collectors but the CMS G1 collectors). BoolObjectClosure* _is_alive_non_header; // Soft ref clearing policies // . the default policy static ReferencePolicy* _default_soft_ref_policy;
*** 100,109 **** --- 139,150 ---- DiscoveredList* _discoveredWeakRefs; DiscoveredList* _discoveredFinalRefs; DiscoveredList* _discoveredPhantomRefs; public: + static int subclasses_of_ref() { return (REF_PHANTOM - REF_OTHER); } + int num_q() { return _num_q; } int max_num_q() { return _max_num_q; } void set_active_mt_degree(int v) { _num_q = v; } DiscoveredList* discovered_soft_refs() { return _discoveredSoftRefs; } static oop sentinel_ref() { return _sentinelRef; }