package rocks.inspectit.shared.all.communication.data; import java.sql.Timestamp; import javax.persistence.Entity; import rocks.inspectit.shared.all.cmr.cache.IObjectSizes; import rocks.inspectit.shared.all.communication.IAggregatedData; import rocks.inspectit.shared.all.communication.SystemSensorData; /** * This class provide dynamic informations about the class loading system of the virtual machine. * <p> * This class implements the {@link IAggregatedData} interface but does not provide the IDs of the * aggregated instances since they are not related to any data and are useless. * * @author Eduard Tudenhoefner * */ @Entity public class ClassLoadingInformationData extends SystemSensorData implements IAggregatedData<ClassLoadingInformationData> { /** * The serial version uid for this class. */ private static final long serialVersionUID = 3670151927025437963L; /** * The count. */ private int count = 0; /** * The minimum number of loaded classes in the virtual machine. */ private int minLoadedClassCount = Integer.MAX_VALUE; /** * The maximum number of loaded classes in the virtual machine. */ private int maxLoadedClassCount = 0; /** * The total number of loaded classes in the virtual machine. */ private int totalLoadedClassCount = 0; /** * The minimum number of total loaded classes since the virtual machine started. */ private long minTotalLoadedClassCount = Long.MAX_VALUE; /** * The maximum number of total loaded classes since the virtual machine started. */ private long maxTotalLoadedClassCount = 0; /** * The total number of total loaded classes since the virtual machine started. */ private long totalTotalLoadedClassCount = 0; /** * The minimum number of unloaded classes since the virtual machine started. */ private long minUnloadedClassCount = Long.MAX_VALUE; /** * The maximum number of unloaded classes since the virtual machine started. */ private long maxUnloadedClassCount = 0; /** * The total number of unloaded classes since the virtual machine started. */ private long totalUnloadedClassCount = 0; /** * Default no-args constructor. */ public ClassLoadingInformationData() { } /** * The constructor which needs three parameters. * * @param timeStamp * The Timestamp. * @param platformIdent * The PlatformIdent. * @param sensorTypeIdent * The SensorTypeIdent. */ public ClassLoadingInformationData(Timestamp timeStamp, long platformIdent, long sensorTypeIdent) { super(timeStamp, platformIdent, sensorTypeIdent); } /** * Gets {@link #count}. * * @return {@link #count} */ public int getCount() { return count; } /** * Sets {@link #count}. * * @param count * New value for {@link #count} */ public void setCount(int count) { this.count = count; } /** * increases the count by 1. */ public void incrementCount() { this.count++; } /** * adds the given value to the total number of loaded classes. * * @param loadedClassCount * the value to add. */ public void addLoadedClassCount(int loadedClassCount) { this.totalLoadedClassCount += loadedClassCount; } /** * Gets {@link #minLoadedClassCount}. * * @return {@link #minLoadedClassCount} */ public int getMinLoadedClassCount() { return minLoadedClassCount; } /** * Sets {@link #minLoadedClassCount}. * * @param minLoadedClassCount * New value for {@link #minLoadedClassCount} */ public void setMinLoadedClassCount(int minLoadedClassCount) { this.minLoadedClassCount = minLoadedClassCount; } /** * Gets {@link #maxLoadedClassCount}. * * @return {@link #maxLoadedClassCount} */ public int getMaxLoadedClassCount() { return maxLoadedClassCount; } /** * Sets {@link #maxLoadedClassCount}. * * @param maxLoadedClassCount * New value for {@link #maxLoadedClassCount} */ public void setMaxLoadedClassCount(int maxLoadedClassCount) { this.maxLoadedClassCount = maxLoadedClassCount; } /** * Gets {@link #totalLoadedClassCount}. * * @return {@link #totalLoadedClassCount} */ public int getTotalLoadedClassCount() { return totalLoadedClassCount; } /** * Sets {@link #totalLoadedClassCount}. * * @param totalLoadedClassCount * New value for {@link #totalLoadedClassCount} */ public void setTotalLoadedClassCount(int totalLoadedClassCount) { this.totalLoadedClassCount = totalLoadedClassCount; } /** * adds the given value to the total number of loaded classes. * * @param totalLoadedClassCount * the value to add. */ public void addTotalLoadedClassCount(long totalLoadedClassCount) { this.totalTotalLoadedClassCount += totalLoadedClassCount; } /** * Gets {@link #minTotalLoadedClassCount}. * * @return {@link #minTotalLoadedClassCount} */ public long getMinTotalLoadedClassCount() { return minTotalLoadedClassCount; } /** * Sets {@link #minTotalLoadedClassCount}. * * @param minTotalLoadedClassCount * New value for {@link #minTotalLoadedClassCount} */ public void setMinTotalLoadedClassCount(long minTotalLoadedClassCount) { this.minTotalLoadedClassCount = minTotalLoadedClassCount; } /** * Gets {@link #maxTotalLoadedClassCount}. * * @return {@link #maxTotalLoadedClassCount} */ public long getMaxTotalLoadedClassCount() { return maxTotalLoadedClassCount; } /** * Sets {@link #maxTotalLoadedClassCount}. * * @param maxTotalLoadedClassCount * New value for {@link #maxTotalLoadedClassCount} */ public void setMaxTotalLoadedClassCount(long maxTotalLoadedClassCount) { this.maxTotalLoadedClassCount = maxTotalLoadedClassCount; } /** * Gets {@link #totalTotalLoadedClassCount}. * * @return {@link #totalTotalLoadedClassCount} */ public long getTotalTotalLoadedClassCount() { return totalTotalLoadedClassCount; } /** * Sets {@link #totalTotalLoadedClassCount}. * * @param totalTotalLoadedClassCount * New value for {@link #totalTotalLoadedClassCount} */ public void setTotalTotalLoadedClassCount(long totalTotalLoadedClassCount) { this.totalTotalLoadedClassCount = totalTotalLoadedClassCount; } /** * adds the given value to the number of unloaded classes. * * @param unloadedClassCount * the value to add. */ public void addUnloadedClassCount(long unloadedClassCount) { this.totalUnloadedClassCount += unloadedClassCount; } /** * Gets {@link #minUnloadedClassCount}. * * @return {@link #minUnloadedClassCount} */ public long getMinUnloadedClassCount() { return minUnloadedClassCount; } /** * Sets {@link #minUnloadedClassCount}. * * @param minUnloadedClassCount * New value for {@link #minUnloadedClassCount} */ public void setMinUnloadedClassCount(long minUnloadedClassCount) { this.minUnloadedClassCount = minUnloadedClassCount; } /** * Gets {@link #maxUnloadedClassCount}. * * @return {@link #maxUnloadedClassCount} */ public long getMaxUnloadedClassCount() { return maxUnloadedClassCount; } /** * Sets {@link #maxUnloadedClassCount}. * * @param maxUnloadedClassCount * New value for {@link #maxUnloadedClassCount} */ public void setMaxUnloadedClassCount(long maxUnloadedClassCount) { this.maxUnloadedClassCount = maxUnloadedClassCount; } /** * Gets {@link #totalUnloadedClassCount}. * * @return {@link #totalUnloadedClassCount} */ public long getTotalUnloadedClassCount() { return totalUnloadedClassCount; } /** * Sets {@link #totalUnloadedClassCount}. * * @param totalUnloadedClassCount * New value for {@link #totalUnloadedClassCount} */ public void setTotalUnloadedClassCount(long totalUnloadedClassCount) { this.totalUnloadedClassCount = totalUnloadedClassCount; } /** * Aggregates other class loading object info this object. * * @param other * Object to aggregate data from. */ @Override public void aggregate(ClassLoadingInformationData other) { count += other.count; minLoadedClassCount = Math.min(minLoadedClassCount, other.minLoadedClassCount); maxLoadedClassCount = Math.max(maxLoadedClassCount, other.maxLoadedClassCount); totalLoadedClassCount += other.totalLoadedClassCount; minTotalLoadedClassCount = Math.min(minTotalLoadedClassCount, other.minTotalLoadedClassCount); maxTotalLoadedClassCount = Math.max(maxTotalLoadedClassCount, other.maxTotalLoadedClassCount); totalTotalLoadedClassCount += other.totalTotalLoadedClassCount; minUnloadedClassCount = Math.min(minUnloadedClassCount, other.minUnloadedClassCount); maxUnloadedClassCount = Math.max(maxUnloadedClassCount, other.maxUnloadedClassCount); totalUnloadedClassCount += other.maxUnloadedClassCount; } /** * {@inheritDoc} */ @Override public ClassLoadingInformationData getData() { return this; } /** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = (prime * result) + count; result = (prime * result) + maxLoadedClassCount; result = (prime * result) + (int) (maxTotalLoadedClassCount ^ (maxTotalLoadedClassCount >>> 32)); result = (prime * result) + (int) (maxUnloadedClassCount ^ (maxUnloadedClassCount >>> 32)); result = (prime * result) + minLoadedClassCount; result = (prime * result) + (int) (minTotalLoadedClassCount ^ (minTotalLoadedClassCount >>> 32)); result = (prime * result) + (int) (minUnloadedClassCount ^ (minUnloadedClassCount >>> 32)); result = (prime * result) + totalLoadedClassCount; result = (prime * result) + (int) (totalTotalLoadedClassCount ^ (totalTotalLoadedClassCount >>> 32)); result = (prime * result) + (int) (totalUnloadedClassCount ^ (totalUnloadedClassCount >>> 32)); return result; } /** * {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } ClassLoadingInformationData other = (ClassLoadingInformationData) obj; if (count != other.count) { return false; } if (maxLoadedClassCount != other.maxLoadedClassCount) { return false; } if (maxTotalLoadedClassCount != other.maxTotalLoadedClassCount) { return false; } if (maxUnloadedClassCount != other.maxUnloadedClassCount) { return false; } if (minLoadedClassCount != other.minLoadedClassCount) { return false; } if (minTotalLoadedClassCount != other.minTotalLoadedClassCount) { return false; } if (minUnloadedClassCount != other.minUnloadedClassCount) { return false; } if (totalLoadedClassCount != other.totalLoadedClassCount) { return false; } if (totalTotalLoadedClassCount != other.totalTotalLoadedClassCount) { return false; } if (totalUnloadedClassCount != other.totalUnloadedClassCount) { return false; } return true; } /** * {@inheritDoc} */ @Override public long getObjectSize(IObjectSizes objectSizes, boolean doAlign) { long size = super.getObjectSize(objectSizes, doAlign); size += objectSizes.getPrimitiveTypesSize(0, 0, 4, 0, 6, 0); if (doAlign) { return objectSizes.alignTo8Bytes(size); } else { return size; } } }