文档章节

java计算object大小

go4it
 go4it
发布于 2017/04/05 23:01
字数 118
阅读 14
收藏 2

##maven

        <!-- size of-->
        <dependency>
            <groupId>com.carrotsearch</groupId>
            <artifactId>java-sizeof</artifactId>
            <version>0.0.3</version>
        </dependency>

##util

public class SizeOfUtil {

    public static enum SizeEnum {
        B {
            @Override
            public double getFromByteSize(long byteSize) {
                return byteSize;
            }
        },K {
            @Override
            public double getFromByteSize(long byteSize) {
                return byteSize*1.0/1024;
            }
        },M {
            @Override
            public double getFromByteSize(long byteSize) {
                return byteSize*1.0/1024/1024;
            }
        },G {
            @Override
            public double getFromByteSize(long byteSize) {
                return byteSize*1.0/1024/1024/1024;
            }
        };

        public abstract double getFromByteSize(long byteSize);
    }

    /**
     * 默认
     * 返回bytes
     * @param o
     * @return
     */
    public static double getObjectSize(Object o,SizeEnum sizeEnum){
        long byteSize = 0;
        if(o instanceof Collection<?>){
            byteSize = RamUsageEstimator.sizeOfAll(o);
        }else{
            byteSize = RamUsageEstimator.sizeOf(o);
        }
        return sizeEnum.getFromByteSize(byteSize);
    }
}

##使用

System.out.println(SizeOfUtil.getObjectSize(map, SizeOfUtil.SizeEnum.K));

© 著作权归作者所有

共有 人打赏支持
go4it
粉丝 67
博文 761
码字总数 565783
作品 0
深圳
java计算对象占用内存大小:lucene专用于计算堆内存占用大小的工具类

RamUsageEstimator,maven坐标: RamUsageEstimator就是根据java对象在堆内存中的存储格式, 通过计算Java对象头、实例数据、引用等的大小,相加而得,如果有引用,还能递归计算引用对象的大...

杨春炼
08/24
0
2
一种Java中对象实例占用堆空间衡量方法

本文的方法是利用java.lang.Instrumentation的工具类来实现的,之前看过一篇红薯的文章介绍了这方面的内容就跟着做了下,并总结出一套比较靠谱的推算方式。红薯的文章因为是当时看的没有记录...

gangzz
2013/04/05
0
3
JVM概念之Java对象的大小与引用类型

基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大...

crazyinsomnia
2010/01/09
0
0
JVM(Thread/Stack)

JVM Thread/Stack Memory Size JVM Thread/Stack Object states (6 states) JVisualVM

赵-猛
2016/10/12
0
0
JAVA内存管理和JVM运行机制、垃圾回收、内存调优

一、JAVA内存管理 java是跨平台语言,java预编译.class文件放置JVM虚拟机中运行; Java的内存结构,也就是运行时的数据区域 运行时数据区 方法区:常量池、变量等存储地方;(持久区) 堆:实...

盼望明天
08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL 到底支不支持事务嵌套?

最近开发中遇到了使用MySQL,多次开启事务,出现了数据错乱问题,伪代码如下: begin; # 操作1 begin; # 操作2 rollback; 执行完后出现了操作1的数据真正写入,只有操作2的数据回滚...

宇润
28分钟前
3
0
fastDfs应用(安装过程待写)

1.效果 2.安装 2.1 导入已经安装好fastDFS的镜像 2.1.1 导入镜像 2.1.2 更改系统兼容性 2.1.3 开机 2.1.4 修改 一下内容 2.1.4.1 修改系统的ip 原来系统ip...

Lucky_Me
32分钟前
3
0
5. Python3源码—字符串(str)对象

5.1. 字符串对象 字符串对象是“变长对象”。 5.1.1. Python中的创建 Python中字符串(strs)对象最重要的创建方法为PyUnicode_DecodeUTF8Stateful,如下Python语句最终会调用到PyUnicode_D...

Mr_zebra
51分钟前
3
0
第十章:路由网关(Zuul)进阶:过滤器、异常处理

第十章:路由网关(Zuul)进阶:过滤器、异常处理 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者...

DemonsI
53分钟前
2
0
nginx屏蔽指定接口(URL)

Step1:需求 web平台上线后,需要屏蔽某个服务接口,但又不想重新上线,可以采用nginx屏蔽指定平台接口的办法 Step2:具体操作 location /dist/views/landing/UNIQUE_BEACON_URL { re...

Linux_Anna
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部