31 32 void PreservedMarks::restore() { 33 while (!_stack.is_empty()) { 34 const OopAndMarkOop elem = _stack.pop(); 35 elem.set_mark(); 36 } 37 assert_empty(); 38 } 39 40 void PreservedMarks::restore_and_increment(volatile size_t* const total_size_addr) { 41 const size_t stack_size = size(); 42 restore(); 43 // Only do the atomic add if the size is > 0. 44 if (stack_size > 0) { 45 Atomic::add(stack_size, total_size_addr); 46 } 47 } 48 49 #ifndef PRODUCT 50 void PreservedMarks::assert_empty() { 51 assert(_stack.is_empty(), "stack expected to be empty, size = "SIZE_FORMAT, 52 _stack.size()); 53 assert(_stack.cache_size() == 0, 54 "stack expected to have no cached segments, cache size = "SIZE_FORMAT, 55 _stack.cache_size()); 56 } 57 #endif // ndef PRODUCT 58 59 void RemoveForwardedPointerClosure::do_object(oop obj) { 60 if (obj->is_forwarded()) { 61 PreservedMarks::init_forwarded_mark(obj); 62 } 63 } 64 65 void PreservedMarksSet::init(uint num) { 66 assert(_stacks == NULL && _num == 0, "do not re-initialize"); 67 assert(num > 0, "pre-condition"); 68 if (_in_c_heap) { 69 _stacks = NEW_C_HEAP_ARRAY(Padded<PreservedMarks>, num, mtGC); 70 } else { 71 _stacks = NEW_RESOURCE_ARRAY(Padded<PreservedMarks>, num); 72 } 73 for (uint i = 0; i < num; i += 1) { 74 ::new (_stacks + i) PreservedMarks(); | 31 32 void PreservedMarks::restore() { 33 while (!_stack.is_empty()) { 34 const OopAndMarkOop elem = _stack.pop(); 35 elem.set_mark(); 36 } 37 assert_empty(); 38 } 39 40 void PreservedMarks::restore_and_increment(volatile size_t* const total_size_addr) { 41 const size_t stack_size = size(); 42 restore(); 43 // Only do the atomic add if the size is > 0. 44 if (stack_size > 0) { 45 Atomic::add(stack_size, total_size_addr); 46 } 47 } 48 49 #ifndef PRODUCT 50 void PreservedMarks::assert_empty() { 51 assert(_stack.is_empty(), "stack expected to be empty, size = " SIZE_FORMAT, 52 _stack.size()); 53 assert(_stack.cache_size() == 0, 54 "stack expected to have no cached segments, cache size = " SIZE_FORMAT, 55 _stack.cache_size()); 56 } 57 #endif // ndef PRODUCT 58 59 void RemoveForwardedPointerClosure::do_object(oop obj) { 60 if (obj->is_forwarded()) { 61 PreservedMarks::init_forwarded_mark(obj); 62 } 63 } 64 65 void PreservedMarksSet::init(uint num) { 66 assert(_stacks == NULL && _num == 0, "do not re-initialize"); 67 assert(num > 0, "pre-condition"); 68 if (_in_c_heap) { 69 _stacks = NEW_C_HEAP_ARRAY(Padded<PreservedMarks>, num, mtGC); 70 } else { 71 _stacks = NEW_RESOURCE_ARRAY(Padded<PreservedMarks>, num); 72 } 73 for (uint i = 0; i < num; i += 1) { 74 ::new (_stacks + i) PreservedMarks(); |