< prev index next >

src/hotspot/share/gc/z/zMark.cpp

Print this page

 154   // Reset flush counters
 155   _work_nproactiveflush.store_relaxed(0u);
 156   _work_nterminateflush.store_relaxed(0u);
 157 }
 158 
 159 void ZMark::finish_work() {
 160   // Accumulate proactive/terminate flush counters
 161   _nproactiveflush += _work_nproactiveflush.load_relaxed();
 162   _nterminateflush += _work_nterminateflush.load_relaxed();
 163 }
 164 
 165 void ZMark::follow_work_complete() {
 166   follow_work(false /* partial */);
 167 }
 168 
 169 bool ZMark::follow_work_partial() {
 170   return follow_work(true /* partial */);
 171 }
 172 
 173 bool ZMark::is_array(zaddress addr) const {
 174   return to_oop(addr)->is_objArray();
 175 }
 176 
 177 static uintptr_t encode_partial_array_offset(zpointer* addr) {
 178   return untype(ZAddress::offset(to_zaddress((uintptr_t)addr))) >> ZMarkPartialArrayMinSizeShift;
 179 }
 180 
 181 static zpointer* decode_partial_array_offset(uintptr_t offset) {
 182   return (zpointer*)ZOffset::address(to_zoffset(offset << ZMarkPartialArrayMinSizeShift));
 183 }
 184 
 185 void ZMark::push_partial_array(zpointer* addr, size_t length, bool finalizable) {
 186   assert(is_aligned(addr, ZMarkPartialArrayMinSize), "Address misaligned");
 187   ZMarkThreadLocalStacks* const stacks = ZThreadLocalData::mark_stacks(Thread::current(), _generation->id());
 188   ZMarkStripe* const stripe = _stripes.stripe_for_addr((uintptr_t)addr);
 189   const uintptr_t offset = encode_partial_array_offset(addr);
 190   const ZMarkStackEntry entry(offset, length, finalizable);
 191 
 192   log_develop_trace(gc, marking)("Array push partial: " PTR_FORMAT " (%zu), stripe: %zu",
 193                                  p2i(addr), length, _stripes.stripe_id(stripe));
 194 

 154   // Reset flush counters
 155   _work_nproactiveflush.store_relaxed(0u);
 156   _work_nterminateflush.store_relaxed(0u);
 157 }
 158 
 159 void ZMark::finish_work() {
 160   // Accumulate proactive/terminate flush counters
 161   _nproactiveflush += _work_nproactiveflush.load_relaxed();
 162   _nterminateflush += _work_nterminateflush.load_relaxed();
 163 }
 164 
 165 void ZMark::follow_work_complete() {
 166   follow_work(false /* partial */);
 167 }
 168 
 169 bool ZMark::follow_work_partial() {
 170   return follow_work(true /* partial */);
 171 }
 172 
 173 bool ZMark::is_array(zaddress addr) const {
 174   return to_oop(addr)->is_refArray();
 175 }
 176 
 177 static uintptr_t encode_partial_array_offset(zpointer* addr) {
 178   return untype(ZAddress::offset(to_zaddress((uintptr_t)addr))) >> ZMarkPartialArrayMinSizeShift;
 179 }
 180 
 181 static zpointer* decode_partial_array_offset(uintptr_t offset) {
 182   return (zpointer*)ZOffset::address(to_zoffset(offset << ZMarkPartialArrayMinSizeShift));
 183 }
 184 
 185 void ZMark::push_partial_array(zpointer* addr, size_t length, bool finalizable) {
 186   assert(is_aligned(addr, ZMarkPartialArrayMinSize), "Address misaligned");
 187   ZMarkThreadLocalStacks* const stacks = ZThreadLocalData::mark_stacks(Thread::current(), _generation->id());
 188   ZMarkStripe* const stripe = _stripes.stripe_for_addr((uintptr_t)addr);
 189   const uintptr_t offset = encode_partial_array_offset(addr);
 190   const ZMarkStackEntry entry(offset, length, finalizable);
 191 
 192   log_develop_trace(gc, marking)("Array push partial: " PTR_FORMAT " (%zu), stripe: %zu",
 193                                  p2i(addr), length, _stripes.stripe_id(stripe));
 194 
< prev index next >