计算Java对象在内存中占用空间
2017-01-12 18:08
573 查看
1).对象占用空间计算原理:http://www.cnblogs.com/magialmoon/p/3757767.html
2).计算复合对象(即对象中引用其他对象):http://yueyemaitian.iteye.com/blog/2033046
3).ehcache包中提供了三种计算单个对象大小的方法:http://www.blogjava.net/DLevin/archive/2013/11/01/405822.html
由于2中的代码只能打包运行(因为其中用到的Instrumentation实例需要javaagent注入),为了贴合web项目实际需求,将代码做了微小修改
package com.kting.huawei.base.commons.util;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
import net.sf.ehcache.pool.sizeof.ReflectionSizeOf;
/**
* 对象占用字节大小工具类
*
* @author tianmai.fh
* @date 2014-03-18 11:29
*/
public class SizeOfObject {
static Instrumentation inst;
public static void premain(String args, Instrumentation instP) {
inst = instP;
}
/**
* 直接计算当前对象占用空间大小,包括当前类及超类的基本类型实例字段大小、
* 引用类型实例字段引用大小、实例基本类型数组总占用空间、实例引用类型数组引用本身占用空间大小;
* 但是不包括超类继承下来的和当前类声明的实例引用字段的对象本身的大小、实例引用数组引用的对象本身的大小
*
* @param obj
* @return
*/
// public static long sizeOf(Object obj) {
// return inst.getObjectSize(obj);
// }
private static long sizeOf(Object obj) {
return new ReflectionSizeOf().sizeOf(obj);
}
/**
* 递归计算当前对象占用空间总大小,包括当前类和超类的实例字段大小以及实例字段引用对象大小
*
* @param objP
* @return
* @throws IllegalAccessException
*/
public static long fullSizeOf(Object objP) throws IllegalAccessException {
Set
2).计算复合对象(即对象中引用其他对象):http://yueyemaitian.iteye.com/blog/2033046
3).ehcache包中提供了三种计算单个对象大小的方法:http://www.blogjava.net/DLevin/archive/2013/11/01/405822.html
由于2中的代码只能打包运行(因为其中用到的Instrumentation实例需要javaagent注入),为了贴合web项目实际需求,将代码做了微小修改
package com.kting.huawei.base.commons.util;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
import net.sf.ehcache.pool.sizeof.ReflectionSizeOf;
/**
* 对象占用字节大小工具类
*
* @author tianmai.fh
* @date 2014-03-18 11:29
*/
public class SizeOfObject {
static Instrumentation inst;
public static void premain(String args, Instrumentation instP) {
inst = instP;
}
/**
* 直接计算当前对象占用空间大小,包括当前类及超类的基本类型实例字段大小、
* 引用类型实例字段引用大小、实例基本类型数组总占用空间、实例引用类型数组引用本身占用空间大小;
* 但是不包括超类继承下来的和当前类声明的实例引用字段的对象本身的大小、实例引用数组引用的对象本身的大小
*
* @param obj
* @return
*/
// public static long sizeOf(Object obj) {
// return inst.getObjectSize(obj);
// }
private static long sizeOf(Object obj) {
return new ReflectionSizeOf().sizeOf(obj);
}
/**
* 递归计算当前对象占用空间总大小,包括当前类和超类的实例字段大小以及实例字段引用对象大小
*
* @param objP
* @return
* @throws IllegalAccessException
*/
public static long fullSizeOf(Object objP) throws IllegalAccessException {
Set
相关文章推荐
- 对于Java程序猿学习的建议
- 浅析Spring AOP源码(十七) Spring AOP开发大作战
- java 服务器程序部署环境搭建
- JavaWeb中请求编码的一般处理
- eclipse 转idea快捷键
- Java中Json转换Bean对象并忽略大小写!
- 浅析Spring AOP源码(十六) 分析ProxyFactory
- 使用阿里云的ip地址查询服务-使用java调用ip地址查询服务
- jxl 导出excel springMVC
- Java四种线程池的使用
- 【SSH网上商城项目实战07】Struts2和Json的整合
- 浅析Spring AOP源码(十五) 分析JdkDynamicAopProxy的invoke方法
- java模板方法模式
- spring配置datasource三种方式及具体信息
- java的Arrays类的应用
- java 中的同步机制
- 浅析Spring AOP源码(十四) 分析ProxyFactoryBean
- 在eclipse中使用svn来比较版本差异及查看各个版本的代码
- java数据转json
- 相似文档查找算法之 simHash 简介及其 java 实现