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

com.holmos.cache.size.layout.MemoryLayoutSpecification Maven / Gradle / Ivy

There is a newer version: 1.0.2u10
Show newest version
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);

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy