src/hotspot/share/gc/shared/preservedMarks.cpp
changeset 47885 5caa1d5f74c1
parent 47216 71c04702a3d5
child 49722 a47d1e21b3f1
equal deleted inserted replaced
47884:3cfab71d6c81 47885:5caa1d5f74c1
     1 /*
     1 /*
     2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    33   while (!_stack.is_empty()) {
    33   while (!_stack.is_empty()) {
    34     const OopAndMarkOop elem = _stack.pop();
    34     const OopAndMarkOop elem = _stack.pop();
    35     elem.set_mark();
    35     elem.set_mark();
    36   }
    36   }
    37   assert_empty();
    37   assert_empty();
       
    38 }
       
    39 
       
    40 void PreservedMarks::adjust_during_full_gc() {
       
    41   StackIterator<OopAndMarkOop, mtGC> iter(_stack);
       
    42   while (!iter.is_empty()) {
       
    43     OopAndMarkOop* elem = iter.next_addr();
       
    44 
       
    45     oop obj = elem->get_oop();
       
    46     if (obj->is_forwarded()) {
       
    47       elem->set_oop(obj->forwardee());
       
    48     }
       
    49   }
    38 }
    50 }
    39 
    51 
    40 void PreservedMarks::restore_and_increment(volatile size_t* const total_size_addr) {
    52 void PreservedMarks::restore_and_increment(volatile size_t* const total_size_addr) {
    41   const size_t stack_size = size();
    53   const size_t stack_size = size();
    42   restore();
    54   restore();
   102     _sub_tasks.set_n_threads(worker_num);
   114     _sub_tasks.set_n_threads(worker_num);
   103     _sub_tasks.set_n_tasks(preserved_marks_set->num());
   115     _sub_tasks.set_n_tasks(preserved_marks_set->num());
   104   }
   116   }
   105 };
   117 };
   106 
   118 
   107 
       
   108 void PreservedMarksSet::reclaim() {
   119 void PreservedMarksSet::reclaim() {
   109   assert_empty();
   120   assert_empty();
   110 
   121 
   111   for (uint i = 0; i < _num; i += 1) {
   122   for (uint i = 0; i < _num; i += 1) {
   112     _stacks[i].~Padded<PreservedMarks>();
   123     _stacks[i].~Padded<PreservedMarks>();