< prev index next >

src/share/vm/gc/shared/preservedMarks.cpp

Print this page




  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();


< prev index next >