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

org.eclipse.mat.snapshot.SnapshotInfo Maven / Gradle / Ivy

The 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;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Class describing an {@link ISnapshot}. Each snapshot has some core data, like
 * the date when it was acquired/parsed, the number of objects inside... This
 * data is available with the snapshot info which is usually serialized along
 * with the snapshot.
 */
public class SnapshotInfo implements Serializable {
    private static final long serialVersionUID = 4L;

    protected String path;
    protected String prefix;
    protected String jvmInfo;
    protected int identifierSize;
    protected Date creationDate;
    protected int numberOfObjects;
    protected int numberOfGCRoots;
    protected int numberOfClasses;
    protected int numberOfClassLoaders;
    protected long usedHeapSize;
    protected Map properties;

    /**
     * Construct a snapshot info.
     *
     * @param path                 path from where the snapshot was acquired
     * @param jvmInfo              version of the JVM from which it was acquired
     * @param identifierSize       size of the internal identifiers in the heap dump, i.e. 32 or
     *                             64 bit
     * @param creationDate         date when the snapshot was acquired/parsed
     * @param numberOfObjects      number of Java objects found in the snapshot
     * @param numberOfGCRoots      number of GC roots found in the snapshot
     * @param numberOfClasses      number of Java Classes found in the snapshot
     * @param numberOfClassLoaders number of ClassLoaders found in the snapshot
     * @param usedHeapSize         number of bytes used in the heap (the allocated memory may be
     *                             higher)
     */
    public SnapshotInfo(String path, String prefix, String jvmInfo, int identifierSize, Date creationDate,
                        int numberOfObjects, int numberOfGCRoots, int numberOfClasses, int numberOfClassLoaders,
                        long usedHeapSize) {
        this.path = path;
        this.prefix = prefix;
        this.jvmInfo = jvmInfo;
        this.identifierSize = identifierSize;
        this.creationDate = creationDate != null ? new Date(creationDate.getTime()) : null;
        this.numberOfObjects = numberOfObjects;
        this.numberOfGCRoots = numberOfGCRoots;
        this.numberOfClasses = numberOfClasses;
        this.numberOfClassLoaders = numberOfClassLoaders;
        this.usedHeapSize = usedHeapSize;
        this.properties = new HashMap();
    }

    @Deprecated
    public SnapshotInfo(String path, String jvmInfo, int identifierSize, Date creationDate, int numberOfObjects,
                        int numberOfGCRoots, int numberOfClasses, int numberOfClassLoaders, long usedHeapSize) {
        this(path, prefix(path), jvmInfo, identifierSize, creationDate, numberOfObjects, numberOfGCRoots,
                numberOfClasses, numberOfClassLoaders, usedHeapSize);
    }

    private static String prefix(String path) {
        int p = path.lastIndexOf('.');
        return p >= 0 ? path.substring(0, p + 1) : path + '.';
    }

    public Serializable getProperty(String name) {
        return properties.get(name);
    }

    public Serializable setProperty(String name, Serializable value) {
        return properties.put(name, value);
    }

    /**
     * Get the absolute path of the heap dump file.
     *
     * @return absolute path of the heap dump file.
     */
    public String getPath() {
        return path;
    }

    /**
     * Get the common prefix used to name all additional (e.g. index) files. The
     * prefix includes the directory path.
     *
     * @return common prefix used to name additional files
     */
    public String getPrefix() {
        return prefix;
    }

    /**
     * Get version of the JVM from which it was acquired.
     *
     * @return version of the JVM from which it was acquired
     */
    public String getJvmInfo() {
        return jvmInfo;
    }

    /**
     * Get size of the internal identifiers in the heap dump, i.e. 32 or 64 bit.
     *
     * @return size of the internal identifiers in the heap dump, i.e. 32 or 64
     * bit
     */
    public int getIdentifierSize() {
        return identifierSize;
    }

    /**
     * Get date when the snapshot was acquired/parsed.
     *
     * @return creation date, or null if the creation date is not
     * known
     */
    public Date getCreationDate() {
        return creationDate != null ? new Date(creationDate.getTime()) : null;
    }

    /**
     * Get number of Java objects found in the snapshot.
     *
     * @return number of Java objects found in the snapshot
     */
    public int getNumberOfObjects() {
        return numberOfObjects;
    }

    /**
     * Get number of GC roots found in the snapshot.
     *
     * @return number of GC roots found in the snapshot
     */
    public int getNumberOfGCRoots() {
        return numberOfGCRoots;
    }

    /**
     * Get number of Java Classes found in the snapshot.
     *
     * @return number of Java Classes found in the snapshot
     */
    public int getNumberOfClasses() {
        return numberOfClasses;
    }

    /**
     * Get number of ClassLoaders found in the snapshot
     *
     * @return number of ClassLoaders found in the snapshot
     */
    public int getNumberOfClassLoaders() {
        return numberOfClassLoaders;
    }

    /**
     * Get number of bytes used in the heap (the allocated memory may be higher)
     *
     * @return number of bytes used in the heap (the allocated memory may be
     * higher)
     */
    public long getUsedHeapSize() {
        return usedHeapSize;
    }

    @SuppressWarnings("nls")
    @Override
    public String toString() {
        StringBuilder summary = new StringBuilder();
        summary.append("Path: ");
        summary.append(path);
        summary.append("\r\nJVM Info: ");
        summary.append(jvmInfo);
        summary.append("\r\nIdentifier Size: ");
        summary.append(identifierSize);
        summary.append("\r\nCreation Date: ");
        summary.append(creationDate);
        summary.append("\r\nNumber of Objects: ");
        summary.append(numberOfObjects);
        summary.append("\r\nNumber of GC roots: ");
        summary.append(numberOfGCRoots);
        summary.append("\r\nNumber of Classes: ");
        summary.append(numberOfClasses);
        summary.append("\r\nNumber of ClassLoaders: ");
        summary.append(numberOfClassLoaders);
        summary.append("\r\nUsed Heap Size: ");
        summary.append(usedHeapSize);
        return summary.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy