Path: blob/master/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/ObjectValue.java
41171 views
/*1* Copyright (c) 2009, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324package sun.jvm.hotspot.code;2526import java.io.*;27import java.util.*;2829import sun.jvm.hotspot.debugger.*;30import sun.jvm.hotspot.utilities.*;3132/** An ObjectValue describes an object eliminated by escape analysis. */3334public class ObjectValue extends ScopeValue {35private int id;36private ScopeValue klass;37private List<ScopeValue> fieldsValue;3839// Field "boolean visited" is not implemented here since40// it is used only a during debug info creation.4142public ObjectValue(int id) {43this.id = id;44klass = null;45fieldsValue = new ArrayList<>();46}4748public boolean isObject() { return true; }49public int id() { return id; }50public ScopeValue getKlass() { return klass; }51public List<ScopeValue> getFieldsValue() { return fieldsValue; }52public ScopeValue getFieldAt(int i) { return (ScopeValue)fieldsValue.get(i); }53public int fieldsSize() { return fieldsValue.size(); }5455// Field "value" is always NULL here since it is used56// only during deoptimization of a compiled frame57// pointing to reallocated object.58public OopHandle getValue() { return null; }5960/** Serialization of debugging information */6162void readObject(DebugInfoReadStream stream) {63klass = readFrom(stream);64Assert.that(klass.isConstantOop(), "should be constant klass oop");65int length = stream.readInt();66for (int i = 0; i < length; i++) {67ScopeValue val = readFrom(stream);68fieldsValue.add(val);69}70}7172// Printing7374public void print() {75printOn(System.out);76}7778public void printOn(PrintStream tty) {79tty.print("scalarObj[" + id + "]");80}8182void printFieldsOn(PrintStream tty) {83if (fieldsValue.size() > 0) {84((ScopeValue)fieldsValue.get(0)).printOn(tty);85}86for (int i = 1; i < fieldsValue.size(); i++) {87tty.print(", ");88((ScopeValue)fieldsValue.get(i)).printOn(tty);89}90}9192};939495