< prev index next >

src/hotspot/share/gc/g1/g1InCSetState.hpp

Print this page
rev 52675 : 8213890: Implementation of JEP 344: Abortable Mixed Collections for G1
Reviewed-by:
Contributed-by: erik.helin@oracle.com, stefan.johansson@oracle.com

*** 54,64 **** // this encoding allows us to use an > 0 check. // The positive values are encoded in increasing generation order, which // makes getting the next generation fast by a simple increment. They are also // used to index into arrays. // The negative values are used for objects requiring various special cases, ! // for example eager reclamation of humongous objects. Humongous = -1, // The region is humongous NotInCSet = 0, // The region is not in the collection set. Young = 1, // The region is in the collection set and a young region. Old = 2, // The region is in the collection set and an old region. Num --- 54,65 ---- // this encoding allows us to use an > 0 check. // The positive values are encoded in increasing generation order, which // makes getting the next generation fast by a simple increment. They are also // used to index into arrays. // The negative values are used for objects requiring various special cases, ! // for example eager reclamation of humongous objects or optional regions. ! Optional = -2, // The region is optional Humongous = -1, // The region is humongous NotInCSet = 0, // The region is not in the collection set. Young = 1, // The region is in the collection set and a young region. Old = 2, // The region is in the collection set and an old region. Num
*** 76,89 **** bool is_in_cset() const { return _value > NotInCSet; } bool is_humongous() const { return _value == Humongous; } bool is_young() const { return _value == Young; } bool is_old() const { return _value == Old; } #ifdef ASSERT bool is_default() const { return _value == NotInCSet; } ! bool is_valid() const { return (_value >= Humongous) && (_value < Num); } bool is_valid_gen() const { return (_value >= Young && _value <= Old); } #endif }; // Instances of this class are used for quick tests on whether a reference points --- 77,91 ---- bool is_in_cset() const { return _value > NotInCSet; } bool is_humongous() const { return _value == Humongous; } bool is_young() const { return _value == Young; } bool is_old() const { return _value == Old; } + bool is_optional() const { return _value == Optional; } #ifdef ASSERT bool is_default() const { return _value == NotInCSet; } ! bool is_valid() const { return (_value >= Optional) && (_value < Num); } bool is_valid_gen() const { return (_value >= Young && _value <= Old); } #endif }; // Instances of this class are used for quick tests on whether a reference points
*** 99,108 **** --- 101,116 ---- // referenced, i.e. live. class G1InCSetStateFastTestBiasedMappedArray : public G1BiasedMappedArray<InCSetState> { protected: InCSetState default_value() const { return InCSetState::NotInCSet; } public: + void set_optional(uintptr_t index) { + assert(get_by_index(index).is_default(), + "State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value()); + set_by_index(index, InCSetState::Optional); + } + void set_humongous(uintptr_t index) { assert(get_by_index(index).is_default(), "State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value()); set_by_index(index, InCSetState::Humongous); }
< prev index next >