/* * Copyright (c) 2020, 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. *
*/
// An InstanceStackChunkKlass is a specialization of the InstanceKlass. // // The stackChunkOops have a header containing metadata, and a blob containing a // stack segment (some integral number of stack frames). // // A chunk is said to be "mixed" if it contains interpreter frames or stubs // (which can only be a safepoint stub as the topmost frame). Otherwise, it // must contain only compiled Java frames. // // Interpreter frames in chunks have their internal pointers converted to // relative offsets from fp. Derived pointers in compiled frames might also // be converted to relative offsets from their base.
(1) Metadata at frame top (see frame::metadata_words_at_top) Used on ppc64, empty on x86_64, aarch64 (2) Metadata at the frame bottom (see frame::metadata_words_at_bottom) Used on x86_64 (saved rbp, ret.addr.), aarch64, empty on ppc64
************************************************/
class InstanceStackChunkKlass: public InstanceKlass { friendclass VMStructs; friendclass InstanceKlass; friendclass Continuations;
staticinline size_t bitmap_size_in_bits(size_t stack_size_in_words); // In bits staticinline size_t bitmap_size(size_t stack_size_in_words); // In words staticinline size_t gc_data_size(size_t stack_size_in_words); // In words
// Returns the size of the instance including the stack data. virtual size_t oop_size(oop obj) const override;
// Stack offset is an offset into the Heap staticint offset_of_stack() { return _offset_of_stack; } staticvoid init_offset_of_stack();
// Oop fields (and metadata) iterators // // The InstanceClassLoaderKlass iterators also visit the CLD pointer (or mirror of anonymous klasses).
// Forward iteration // Iterate over the oop fields and metadata. template <typename T, class OopClosureType> inlinevoid oop_oop_iterate(oop obj, OopClosureType* closure);
// Reverse iteration // Iterate over the oop fields and metadata. template <typename T, class OopClosureType> inlinevoid oop_oop_iterate_reverse(oop obj, OopClosureType* closure);
// Bounded range iteration // Iterate over the oop fields and metadata. template <typename T, class OopClosureType> inlinevoid oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr);
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 ist noch experimentell.