< prev index next >

src/hotspot/share/gc/shared/space.inline.hpp

Print this page
rev 49289 : 8199735: Mark word updates need to use Access API

*** 1,7 **** /* ! * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 30,39 **** --- 30,40 ---- #include "gc/shared/generation.hpp" #include "gc/shared/space.hpp" #include "gc/shared/spaceDecorator.hpp" #include "memory/universe.hpp" #include "oops/oopsHierarchy.hpp" + #include "oops/oop.inline.hpp" #include "runtime/prefetch.inline.hpp" #include "runtime/safepoint.hpp" inline HeapWord* Space::block_start(const void* p) { return block_start_const(p);
*** 110,120 **** size_t dead_length = pointer_delta(dead_end, dead_start); if (_allowed_deadspace_words >= dead_length) { _allowed_deadspace_words -= dead_length; CollectedHeap::fill_with_object(dead_start, dead_length); oop obj = oop(dead_start); ! obj->set_mark(obj->mark()->set_marked()); assert(dead_length == (size_t)obj->size(), "bad filler object size"); log_develop_trace(gc, compaction)("Inserting object to dead space: " PTR_FORMAT ", " PTR_FORMAT ", " SIZE_FORMAT "b", p2i(dead_start), p2i(dead_end), dead_length * HeapWordSize); --- 111,121 ---- size_t dead_length = pointer_delta(dead_end, dead_start); if (_allowed_deadspace_words >= dead_length) { _allowed_deadspace_words -= dead_length; CollectedHeap::fill_with_object(dead_start, dead_length); oop obj = oop(dead_start); ! obj->set_mark_raw(obj->mark_raw()->set_marked()); assert(dead_length == (size_t)obj->size(), "bad filler object size"); log_develop_trace(gc, compaction)("Inserting object to dead space: " PTR_FORMAT ", " PTR_FORMAT ", " SIZE_FORMAT "b", p2i(dead_start), p2i(dead_end), dead_length * HeapWordSize);
*** 157,168 **** HeapWord* cur_obj = space->bottom(); HeapWord* scan_limit = space->scan_limit(); while (cur_obj < scan_limit) { assert(!space->scanned_block_is_obj(cur_obj) || ! oop(cur_obj)->mark()->is_marked() || oop(cur_obj)->mark()->is_unlocked() || ! oop(cur_obj)->mark()->has_bias_pattern(), "these are the only valid states during a mark sweep"); if (space->scanned_block_is_obj(cur_obj) && oop(cur_obj)->is_gc_marked()) { // prefetch beyond cur_obj Prefetch::write(cur_obj, interval); size_t size = space->scanned_block_size(cur_obj); --- 158,169 ---- HeapWord* cur_obj = space->bottom(); HeapWord* scan_limit = space->scan_limit(); while (cur_obj < scan_limit) { assert(!space->scanned_block_is_obj(cur_obj) || ! oop(cur_obj)->mark_raw()->is_marked() || oop(cur_obj)->mark_raw()->is_unlocked() || ! oop(cur_obj)->mark_raw()->has_bias_pattern(), "these are the only valid states during a mark sweep"); if (space->scanned_block_is_obj(cur_obj) && oop(cur_obj)->is_gc_marked()) { // prefetch beyond cur_obj Prefetch::write(cur_obj, interval); size_t size = space->scanned_block_size(cur_obj);
*** 333,343 **** Prefetch::write(compaction_top, copy_interval); // copy object and reinit its mark assert(cur_obj != compaction_top, "everything in this pass should be moving"); Copy::aligned_conjoint_words(cur_obj, compaction_top, size); ! oop(compaction_top)->init_mark(); assert(oop(compaction_top)->klass() != NULL, "should have a class"); debug_only(prev_obj = cur_obj); cur_obj += size; } --- 334,344 ---- Prefetch::write(compaction_top, copy_interval); // copy object and reinit its mark assert(cur_obj != compaction_top, "everything in this pass should be moving"); Copy::aligned_conjoint_words(cur_obj, compaction_top, size); ! oop(compaction_top)->init_mark_raw(); assert(oop(compaction_top)->klass() != NULL, "should have a class"); debug_only(prev_obj = cur_obj); cur_obj += size; }
< prev index next >