com.holmos.cache.size.layout.MemoryLayoutSpecification Maven / Gradle / Ivy
package com.holmos.cache.size.layout;
/**
* java 对象内部字段分配内存的策略,在此实现sun公司提供的hotspot JVM给出的策略
* 参考文章 http://www.codeinstructions.com/2008/12/java-objects-memory-structure.html
*
* @author 吴银龙([email protected])
* */
public interface MemoryLayoutSpecification {
/**
* 返回数组类型数据Header部分分配的内存大小
*
* @return 数组类型数据Header占用内存大小
*/
public int getArrayHeaderSize();
/**
* 返回所有的Object子类和Object类本身的Header部分占用内存大小
*
* @return Object类及其子类Header部分占用内存大小
*/
public int getObjectHeaderSize();
/**
* 返回对象类型字段的偏移量,在取数据的时候,32位机器会一次取4Byte整数倍的字段,但是又因为普通的Object和Object的子类的Header有8Byte,那么偏移量就必须以8Byte的整数倍为准
*
* @return 对象类型的偏移量
*/
public int getObjectPadding();
/**
* 返回引用类型的偏移量
*
* @return 引用类型的偏移量
*/
public int getReferenceSize();
/**
* 返回非static类型内部类对外部类的隐藏字段占用内存大小
*
* @return 非static类型内部类对外部类的隐藏字段占用内存大小
* */
public int outerClassReferenceSize();
/**
* 获得类clazz的非静态基础数据类型所占用内存大小
*
* @param clazz 待分析的类clazz
* @return 类clazz的非静态基础数据类型所占用内存大小
* */
@SuppressWarnings("rawtypes")
public int getCommonFieldsSize(Class clazz);
/**
* 获得类clazz的静态基础数据类型所占用内存大小
*
* @param clazz 待分析的类clazz
* @return 类clazz的静态基础数据类型所占用内存大小
* */
@SuppressWarnings("rawtypes")
public int getStaticFieldsSize(Class clazz);
/**
* 对内存的一次读取,读取多少个字节
*
* @return 对内存的一次读取的字节数
* */
public int getDataSizeOnce();
/**
* 获取基础数据类型的大小
*
* @param type 基础数据类型
* @return 基础数据类型的大小
* */
public int getPrimitiveSize(Class> type);
}