All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.mat.snapshot.model.IObject Maven / Gradle / Ivy

There is a newer version: 2.1
Show newest version
/**
 * ****************************************************************************
 * Copyright (c) 2008 SAP AG.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 * SAP AG - initial API and implementation
 * *****************************************************************************
 */
package org.eclipse.mat.snapshot.model;

import java.io.Serializable;
import java.util.List;
import org.eclipse.mat.SnapshotException;
import org.eclipse.mat.snapshot.ISnapshot;

/**
 * Base interface for all objects found in a snapshot. Other model interfaces
 * derive from this interface, e.g. for classes, plain objects, object arrays,
 * primitive arrays...
 *
 * @noimplement
 */
public interface IObject extends Serializable {
  /**
   * The type of the primitive array.
   */
  public interface Type {
    int OBJECT = 2;

    int BOOLEAN = 4;
    int CHAR = 5;
    int FLOAT = 6;
    int DOUBLE = 7;
    int BYTE = 8;
    int SHORT = 9;
    int INT = 10;
    int LONG = 11;
  }

  /**
   * Get id for the snapshot object. The id is not the address, but an
   * internally assigned number fitting into an int (this helps
   * reducing the memory footprint of the snapshot considerably - addresses
   * are only used for visualization purposes).
   *
   * @return id for the snapshot object
   */
  public int getObjectId();

  /**
   * Get address for the snapshot object. This is the address at which the
   * object was stored in memory. Use the address only for visualization
   * purposes and try to use the id wherever possible as the snapshot API is
   * optimized to handle ids and not addresses. Addresses are bigger (
   * long), have no consecutive order (with gaps), and are not
   * used for hashing.
   *
   * @return address for the snapshot object
   */
  public long getObjectAddress();

  /**
   * Get class snapshot object this object is an instance of.
   *
   * @return class snapshot object this object is an instance of
   */
  public IClass getClazz();

  /**
   * Get used heap size of this object.
   *
   * @return used heap size of this object
   */
  public int getUsedHeapSize();

  /**
   * Get retained heap size of this object.
   *
   * @return retained heap size of this object (returns 0 if the dominator
   * tree wasn't calculated for the corresponding snapshot)
   */
  public long getRetainedHeapSize();

  /**
   * Get technical name of this object which is something like class@address.
   *
   * @return technical name of this object which is something like class@address
   */
  public String getTechnicalName();

  /**
   * Get class specific name of this object which depends on the availability
   * of the appropriate name resolver, e.g. for a String the value of the
   * char[].
   *
   * @return class specific name of the given snapshot object or null if it
   * can't be resolved
   */
  public String getClassSpecificName();

  /**
   * Get concatenation of {@link #getTechnicalName()} and
   * {@link #getClassSpecificName()}.
   *
   * @return concatenation of {@link #getTechnicalName()} and
   * {@link #getClassSpecificName()}
   */
  public String getDisplayName();

  /**
   * Get list of snapshot objects referenced from this snapshot object with
   * the name of the field over which it was referenced.
   *
   * @return list of snapshot objects referenced from this snapshot object
   * with the name of the field over which it was referenced
   */
  public List getOutboundReferences();

  /**
   * Resolves and returns the value of a field specified by a dot notation. If
   * the field is a primitive type, the value the returns the corresponding
   * object wrapper, e.g. a java.lang.Boolean is returned for a field of type
   * boolean. If the field is an object reference, the corresponding IObject
   * is returned.
   * 

* The field can be specified using the dot notation, i.e. object references * are followed and its fields are evaluated. If any of the object * references is null, null is returned. * * @param field the field name in dot notation * @return the value of the field */ public Object resolveValue(String field) throws SnapshotException; /** * Get {@link GCRootInfo} if the object is a garbage collection root or null * otherwise. An object may or may not be a garbage collection root, it may * even be one for multiple reasons (described in the {@link GCRootInfo} * object). * * @return {@link GCRootInfo} if the object is a garbage collection root or * null otherwise */ public GCRootInfo[] getGCRootInfo() throws SnapshotException; /** * Returns the snapshot from which this object has been read. * * @return the snapshot from which this object has been read. */ public ISnapshot getSnapshot(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy