< prev index next >

src/share/vm/gc/g1/g1BlockOffsetTable.cpp

Print this page




  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "gc/g1/g1BlockOffsetTable.inline.hpp"
  27 #include "gc/g1/g1CollectedHeap.inline.hpp"
  28 #include "gc/g1/heapRegion.hpp"
  29 #include "gc/shared/space.hpp"

  30 #include "oops/oop.inline.hpp"
  31 #include "runtime/java.hpp"
  32 #include "services/memTracker.hpp"
  33 
  34 
  35 
  36 //////////////////////////////////////////////////////////////////////
  37 // G1BlockOffsetSharedArray
  38 //////////////////////////////////////////////////////////////////////
  39 
  40 G1BlockOffsetSharedArray::G1BlockOffsetSharedArray(MemRegion heap, G1RegionToSpaceMapper* storage) :
  41   _reserved(), _end(NULL), _listener(), _offset_array(NULL) {
  42 
  43   _reserved = heap;
  44   _end = NULL;
  45 
  46   MemRegion bot_reserved = storage->reserved();
  47 
  48   _offset_array = (u_char*)bot_reserved.start();
  49   _end = _reserved.end();
  50 
  51   storage->set_mapping_changed_listener(&_listener);
  52 
  53   if (TraceBlockOffsetTable) {
  54     gclog_or_tty->print_cr("G1BlockOffsetSharedArray::G1BlockOffsetSharedArray: ");
  55     gclog_or_tty->print_cr("  "
  56                   "  rs.base(): " PTR_FORMAT
  57                   "  rs.size(): " SIZE_FORMAT
  58                   "  rs end(): " PTR_FORMAT,
  59                   p2i(bot_reserved.start()), bot_reserved.byte_size(), p2i(bot_reserved.end()));
  60   }
  61 }
  62 
  63 bool G1BlockOffsetSharedArray::is_card_boundary(HeapWord* p) const {
  64   assert(p >= _reserved.start(), "just checking");
  65   size_t delta = pointer_delta(p, _reserved.start());
  66   return (delta & right_n_bits(LogN_words)) == (size_t)NoBits;
  67 }
  68 
  69 #ifdef ASSERT
  70 void G1BlockOffsetSharedArray::check_index(size_t index, const char* msg) const {
  71   assert((index) < (_reserved.word_size() >> LogN_words),
  72          "%s - index: " SIZE_FORMAT ", _vs.committed_size: " SIZE_FORMAT,
  73          msg, (index), (_reserved.word_size() >> LogN_words));
  74   assert(G1CollectedHeap::heap()->is_in_exact(address_for_index_raw(index)),
  75          "Index " SIZE_FORMAT " corresponding to " PTR_FORMAT
  76          " (%u) is not in committed area.",
  77          (index),
  78          p2i(address_for_index_raw(index)),
  79          G1CollectedHeap::heap()->addr_to_region(address_for_index_raw(index)));
  80 }




  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "gc/g1/g1BlockOffsetTable.inline.hpp"
  27 #include "gc/g1/g1CollectedHeap.inline.hpp"
  28 #include "gc/g1/heapRegion.hpp"
  29 #include "gc/shared/space.hpp"
  30 #include "logging/log.hpp"
  31 #include "oops/oop.inline.hpp"
  32 #include "runtime/java.hpp"
  33 #include "services/memTracker.hpp"
  34 
  35 
  36 
  37 //////////////////////////////////////////////////////////////////////
  38 // G1BlockOffsetSharedArray
  39 //////////////////////////////////////////////////////////////////////
  40 
  41 G1BlockOffsetSharedArray::G1BlockOffsetSharedArray(MemRegion heap, G1RegionToSpaceMapper* storage) :
  42   _reserved(), _end(NULL), _listener(), _offset_array(NULL) {
  43 
  44   _reserved = heap;
  45   _end = NULL;
  46 
  47   MemRegion bot_reserved = storage->reserved();
  48 
  49   _offset_array = (u_char*)bot_reserved.start();
  50   _end = _reserved.end();
  51 
  52   storage->set_mapping_changed_listener(&_listener);
  53 
  54   log_trace(gc, bot)("G1BlockOffsetSharedArray::G1BlockOffsetSharedArray: ");
  55   log_trace(gc, bot)("    rs.base(): " PTR_FORMAT "  rs.size(): " SIZE_FORMAT "  rs end(): " PTR_FORMAT,




  56                      p2i(bot_reserved.start()), bot_reserved.byte_size(), p2i(bot_reserved.end()));

  57 }
  58 
  59 bool G1BlockOffsetSharedArray::is_card_boundary(HeapWord* p) const {
  60   assert(p >= _reserved.start(), "just checking");
  61   size_t delta = pointer_delta(p, _reserved.start());
  62   return (delta & right_n_bits(LogN_words)) == (size_t)NoBits;
  63 }
  64 
  65 #ifdef ASSERT
  66 void G1BlockOffsetSharedArray::check_index(size_t index, const char* msg) const {
  67   assert((index) < (_reserved.word_size() >> LogN_words),
  68          "%s - index: " SIZE_FORMAT ", _vs.committed_size: " SIZE_FORMAT,
  69          msg, (index), (_reserved.word_size() >> LogN_words));
  70   assert(G1CollectedHeap::heap()->is_in_exact(address_for_index_raw(index)),
  71          "Index " SIZE_FORMAT " corresponding to " PTR_FORMAT
  72          " (%u) is not in committed area.",
  73          (index),
  74          p2i(address_for_index_raw(index)),
  75          G1CollectedHeap::heap()->addr_to_region(address_for_index_raw(index)));
  76 }


< prev index next >