加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中的对象大小

发布时间:2020-12-15 08:49:03 所属栏目:Java 来源:网络整理
导读:假设我有: Class A{ int a;}A obj = new A(); 然后obj的大小是多少?它是否与int大小相同,就像在C中一样? 如果我能弄清楚这一点,那么我可以在不使用数据库的情况下将大型HashMap保留在RAM中. 提前致谢. 编辑 朋友们, 其实我有: HashMapLong,ListT map; 和
假设我有:

Class A{
   int a;
}

A obj = new A();

然后obj的大小是多少?它是否与int大小相同,就像在C中一样?

如果我能弄清楚这一点,那么我可以在不使用数据库的情况下将大型HashMap保留在RAM中.

提前致谢.

编辑

朋友们,

其实我有:

HashMap<Long,List<T>> map;

class T{
   private int a;
   private int b;
   private int c;
   // constructor,getters and setters
}

并且地图的大小可能会增加到10000000个密钥,对于每个密钥,我将有100-1000的大小列表.

整个地图会留在堆里吗?

编辑2

当我用大约70000个密钥加载地图时,当我将其序列化为文件时,文件大约为18 MB,那么我的地图堆中是18 MB吗?

解决方法

它可能依赖于JVM,但实际上,对于32位JVM,对象= 8字节的头字段.标题包含对类的Id引用.

字段大小取决于字段类型,引用 – 8字节,布尔值 – 1字节等

除了对象对齐到8个字节.那是你的A需要16个字节.最小大小= 8个字节,没有字段.

更多这里http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

如果使用Oracle JVM,则可以使用sun.misc.Unsafe逐字节地调查对象结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读