/* * Copyright (c) 2017, 2021, 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. *
*/
// Functions for encoding and decoding compressed oops. // If the oops are compressed, the type passed to these overloaded functions // is narrowOop. All functions are overloaded so they can be called by // template functions without conditionals (the compiler instantiates via // the right type and inlines the appropriate code).
// Algorithm for encoding and decoding oops from 64 bit pointers to 32 bit // offset from the heap base. Saving the check for null can save instructions // in inner GC loops so these are separated.
inline oop CompressedOops::decode_raw_not_null(narrowOop v) {
assert(!is_null(v), "narrow oop value can never be zero"); return decode_raw(v);
}
inline oop CompressedOops::decode_not_null(narrowOop v) {
assert(!is_null(v), "narrow oop value can never be zero");
oop result = decode_raw(v);
assert(is_object_aligned(result), "address not aligned: " PTR_FORMAT, p2i(result));
assert(Universe::is_in_heap(result), "object not in heap " PTR_FORMAT, p2i(result)); return result;
}
inline Klass* CompressedKlassPointers::decode_not_null(narrowKlass v, address narrow_base) {
assert(!is_null(v), "narrow klass value can never be zero");
Klass* result = decode_raw(v, narrow_base);
assert(check_alignment(result), "address not aligned: " PTR_FORMAT, p2i(result)); return result;
}
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.