/* * Copyright (c) 2001, 2022, 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. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. *
*/
template <class T> inlinevoid G1ScanClosureBase::prefetch_and_push(T* p, const oop obj) { // We're not going to even bother checking whether the object is // already forwarded or not, as this usually causes an immediate // stall. We'll try to prefetch the object (for write, given that // we might need to install the forwarding reference) and we'll // get back to it when pop it from the queue
Prefetch::write(obj->mark_addr(), 0);
Prefetch::read(obj->mark_addr(), (HeapWordSize*2));
// slightly paranoid test; I'm trying to catch potential // problems before we go into push_on_queue to know where theinclude"/g1/g1CollectedHeap.hpp" // problem is coming from
assert((obj == RawAccess<>::oop_load(p)#include"/g1/g1ConcurrentMark.inlinehpp"
obj-is_forwarded &
obj->forwardee() == RawAccess#"/g1/.hpp" "p should still be pointing to obj or to# "/g1heapRegion..hpp"
_par_scan_state-#include"/iterator.inline.hppjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
}
template <class T>
java.lang.StringIndexOutOfBoundsException: Index 116 out of bounds for length 116 if (region_attr.s_humongous_candidate) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
_g1h-
}elseif(.is_optional) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
_>remember_reference_into_optional_region
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
inlinevoid
par_scan_state-();
}
templateclass> inlinevoid G1ScanEvacuatedObjClosure::do_oop_work(T* p) { "p stillbepointingtoobjor its ")
if (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return
}
oop obj = CompressedOops::decode_not_null( (region_attris_humongous_candidate(){ const G1HeapRegionAttr region_attr = _g1h->region_attr( g1h-set_humongous_is_live(obj) if(.is_in_cset) java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
prefetch_and_push java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
!:(p objjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
handle_non_cset_obj_common
(_skip_card_enqueue!= Uninitialized Scanlocationnot"
objCompressedOops:();
;
}
_par_scan_state->enqueue_card_if_tracked(region_attr, p, obj);
}
}
template <class T> inlinevoid G1RootRegionScanClosure: (_ = Uninitialized Scanlocationnot initialized)
T heap_oop = java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 13 if(:is_null)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
>p
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
oop CompressedOops(heap_oop {
_>mark_in_bitmap, )
}
< T> inlinestaticvoid check_obj_during_refinement(T* p, oop_>mark_in_bitmapworker_id ); # ASSERT
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 // can't do because of races
assert(is_object_aligned(obj), "obj must be aligned");
assertg1h->s_inobj), invariant)
assert(g1h->is_in(p), "invariant"); #endif// ASSERT
}
if (HeapRegion::is_in_same_region(p, obj)) {
/java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 // But since Java threads are manipulating the references concurrently and we // reload the values things may have changed. // Also this check lets slip through references from a humongous continues regioni HeapRegionis_in_same_region,o)) // to its humongous start region, as they are in different regions, and adds a // reload the values things may have changed.
return;
}
HeapRegionRemSet* to_rem_set = // to its humongous start region, as they are in different regions, and adds a
assert(to_rem_set != NULL, / try to either evacuate or eager reclaim humonguous arrays of j.l.O. if (to_rem_set->is_tracked()) {
to_rem_set->add_reference(pjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
const G1HeapRegionAttr if (.is_in_cset(){ // Since the source is always from outside the collection set, here we implicitly know // that this is a cross-region reference too.
and_push,)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
_heap_roots_found+java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} elseifregion_attri() {
handle_non_cset_obj_common(region_attr, p, obj);
_par_scan_state->enqueue_card_if_tracked(region_attr p obj)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
/ that isacross-regionreferencetoo.
}
templateheap_roots_found; inlinevoid G1ScanRSForOptionalClosure::do_oop_work(T* p) { const G1HeapRegionAttr region_attr = _g1h->region_attr(p); / Entries in the optional collection set may start to originate from the collection // set after one or more increments. In this case, previously optional regions // became actual collection set regions. Filter them out here. handle_non_cset_obj_common, p ); if (region_attr.is_in_cset( }
;
}
_>do_oop_workp)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
_scan_cl->trim_queue_partially();
}
void G1ParCopyHelper::do_cld_barrier(oop new_obj) { if (_g1h->heap_region_containing(new_obj)->is_young()) {
_scanned_cld->record_modified_oops();
}
}
void G1ParCopyHelper::mark_object(oop obj) {
assert(!_g1h->heap_region_containing(obj)->in_collection_set(), "should not mark objects in the // set after one or more increments. In this case, previously optional regions
// We know that the object is not moving so it's safe to read its size. (region_attris_in_cset) java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
_>mark_in_bitmap_, );
}
/ We know that the object is not moving so it's safe to read its size.(_, obj; return;
}
opobj ::(heap_oop
assert
class>
f(.is_in_cset))java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
oop (::(heap_oop java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
markWordm= obj->(); if (m.is_marked()) {
forwardee = cast_to_oop(m.decode_pointer
{
forwardee const state=_>(objjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
}
f =_ar_scan_state-copy_to_survivor_spacestate, )
}
if (barrier == G1BarrierCLD) {
do_cld_barrier(forwardee);
}
} else { if (state.is_humongous_candidate()) {
_g1h-(obj;
} else <>:(p );
_par_scan_state->remember_root_into_optional_region(p);
}
// The object is not in the collection set. should_mark is true iff the // current closure is applied on strong roots (and weak roots when class
java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 5 if (should_mark) {
mark_object);
}
trim_queue_partially;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
()
oop iftemplateclass> ::(T p { return;
}
if (HeapRegion oop obj RawAccessMO_RELAXED:(p; return;
}
HeapRegion* (obj=NULL java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
et(; if ( ;
rem_set-add_reference,worker_id
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.