package rocks.inspectit.server.cache.impl;
import java.util.List;
import rocks.inspectit.server.cache.AbstractObjectSizes;
import rocks.inspectit.shared.all.cmr.cache.IObjectSizes;
/**
* This class provides a implementation of {@link IObjectSizes} appropriate for calculations of
* object sizes on 64-bit Sun VM. Works only with Java 7.
*
* @author Ivan Senic
*
*/
public class ObjectSizes64Bits extends AbstractObjectSizes {
/**
* {@inheritDoc}
*/
@Override
public long getReferenceSize() {
return 8;
}
/**
* {@inheritDoc}
*/
@Override
public long getSizeOfObjectHeader() {
return 16;
}
/**
* {@inheritDoc}
* <p>
* With no-compressed oops we have internal padding between AbstractList and ArrayList that must
* be counted for.
*/
@Override
public long getSizeOf(List<?> arrayList, int initialCapacity) {
if (null == arrayList) {
return 0;
}
int capacity = getArrayCapacity(arrayList.size(), initialCapacity);
// first AbstractList
long size = alignTo8Bytes(this.getSizeOfObjectHeader() + this.getPrimitiveTypesSize(0, 0, 1, 0, 0, 0));
// then ArraList
size = alignTo8Bytes(size + this.getPrimitiveTypesSize(1, 0, 1, 0, 0, 0));
size += this.getSizeOfArray(capacity);
return alignTo8Bytes(size);
}
}