package com.arturmkrtchyan.sizeof4j; import com.arturmkrtchyan.sizeof4j.calculation.CalculationStrategy; import com.arturmkrtchyan.sizeof4j.calculation.hotspot.HistogramCalculationStrategy; import com.arturmkrtchyan.sizeof4j.util.ReflectionUtil; public class SizeOf { private static final CalculationStrategy histoCalculator = new HistogramCalculationStrategy(); public static int booleanSize() { return Primitive._boolean.size(); } public static int byteSize() { return Primitive._byte.size(); } public static int charSize() { return Primitive._char.size(); } public static int shortSize() { return Primitive._short.size(); } public static int intSize() { return Primitive._int.size(); } public static int floatSize() { return Primitive._float.size(); } public static int longSize() { return Primitive._long.size(); } public static int doubleSize() { return Primitive._double.size(); } public static <T> int shallowSize(final T[] array) { return histoCalculator.calculateShallow(array.getClass(), array.length); } public static <T> int shallowSize(final T object) { if(ReflectionUtil.isPrimitiveArray(object)) { return histoCalculator.calculateShallow(object.getClass(), ReflectionUtil.getArrayLength(object)); } return shallowSize(object.getClass()); } public static <T> int shallowSize(final Class<T> clazz) { if(clazz.isPrimitive()) { return Primitive.get(clazz).size(); } else if(clazz.isArray()) { return histoCalculator.calculateShallow(clazz, 0); } return histoCalculator.calculateShallow(clazz); } }