< prev index next >

src/hotspot/share/oops/markOop.hpp

Print this page

        

*** 104,114 **** // *permanent lock* leaves us with specializing the biased pattern (even when // biased locking isn't enabled). Since biased_lock_alignment for the thread // reference doesn't use the lowest bit ("2 << thread_shift"), we can use // this illegal thread pointer alignment to denote "always locked" pattern. // ! // [ <unused> |1| epoch | age | 1 | 01] permanently locked // class BasicLock; class ObjectMonitor; class JavaThread; --- 104,116 ---- // *permanent lock* leaves us with specializing the biased pattern (even when // biased locking isn't enabled). Since biased_lock_alignment for the thread // reference doesn't use the lowest bit ("2 << thread_shift"), we can use // this illegal thread pointer alignment to denote "always locked" pattern. // ! // [ <unused> | larval |1| epoch | age | 1 | 01] permanently locked ! // ! // A private buffered value is always locked and can be in a larval state. // class BasicLock; class ObjectMonitor; class JavaThread;
*** 124,145 **** lock_bits = 2, biased_lock_bits = 1, max_hash_bits = BitsPerWord - age_bits - lock_bits - biased_lock_bits, hash_bits = max_hash_bits > 31 ? 31 : max_hash_bits, cms_bits = LP64_ONLY(1) NOT_LP64(0), ! epoch_bits = 2 }; // The biased locking code currently requires that the age bits be // contiguous to the lock bits. enum { lock_shift = 0, biased_lock_shift = lock_bits, age_shift = lock_bits + biased_lock_bits, cms_shift = age_shift + age_bits, hash_shift = cms_shift + cms_bits, epoch_shift = hash_shift, ! thread_shift = epoch_shift + epoch_bits }; enum { lock_mask = right_n_bits(lock_bits), lock_mask_in_place = lock_mask << lock_shift, biased_lock_mask = right_n_bits(lock_bits + biased_lock_bits), --- 126,150 ---- lock_bits = 2, biased_lock_bits = 1, max_hash_bits = BitsPerWord - age_bits - lock_bits - biased_lock_bits, hash_bits = max_hash_bits > 31 ? 31 : max_hash_bits, cms_bits = LP64_ONLY(1) NOT_LP64(0), ! epoch_bits = 2, ! always_locked_bits = 1, ! larval_bits = 1 }; // The biased locking code currently requires that the age bits be // contiguous to the lock bits. enum { lock_shift = 0, biased_lock_shift = lock_bits, age_shift = lock_bits + biased_lock_bits, cms_shift = age_shift + age_bits, hash_shift = cms_shift + cms_bits, epoch_shift = hash_shift, ! thread_shift = epoch_shift + epoch_bits, ! larval_shift = thread_shift + always_locked_bits }; enum { lock_mask = right_n_bits(lock_bits), lock_mask_in_place = lock_mask << lock_shift, biased_lock_mask = right_n_bits(lock_bits + biased_lock_bits),
*** 148,162 **** age_mask = right_n_bits(age_bits), age_mask_in_place = age_mask << age_shift, epoch_mask = right_n_bits(epoch_bits), epoch_mask_in_place = epoch_mask << epoch_shift, cms_mask = right_n_bits(cms_bits), ! cms_mask_in_place = cms_mask << cms_shift #ifndef _WIN64 ! ,hash_mask = right_n_bits(hash_bits), ! hash_mask_in_place = (address_word)hash_mask << hash_shift #endif }; // Alignment of JavaThread pointers encoded in object header required by biased locking enum { biased_lock_alignment = 2 << thread_shift }; --- 153,169 ---- age_mask = right_n_bits(age_bits), age_mask_in_place = age_mask << age_shift, epoch_mask = right_n_bits(epoch_bits), epoch_mask_in_place = epoch_mask << epoch_shift, cms_mask = right_n_bits(cms_bits), ! cms_mask_in_place = cms_mask << cms_shift, #ifndef _WIN64 ! hash_mask = right_n_bits(hash_bits), ! hash_mask_in_place = (address_word)hash_mask << hash_shift, #endif + larval_mask = right_n_bits(larval_bits), + larval_mask_in_place = larval_mask << larval_shift }; // Alignment of JavaThread pointers encoded in object header required by biased locking enum { biased_lock_alignment = 2 << thread_shift };
*** 184,193 **** --- 191,202 ---- enum { max_age = age_mask }; enum { max_bias_epoch = epoch_mask }; + enum { larval_state_pattern = (1 << larval_shift) }; + static markOop always_locked_prototype() { return markOop(always_locked_pattern); } bool is_always_locked() const { return mask_bits(value(), always_locked_pattern) == always_locked_pattern; }
*** 369,378 **** --- 378,398 ---- bool has_no_hash() const { return hash() == no_hash; } + // private buffered value operations + markOop enter_larval_state() const { + return markOop((value() & ~larval_mask_in_place) | larval_state_pattern); + } + markOop exit_larval_state() const { + return markOop(value() & ~larval_mask_in_place); + } + bool is_larval_state() const { + return (value() & larval_mask_in_place) == larval_state_pattern; + } + // Prototype mark for initialization static markOop prototype() { return markOop( no_hash_in_place | no_lock_in_place ); }
< prev index next >