Java 对象大小的计算
Java  /  管理员 发布于 4年前   877
Java对象的大小
如何计算一个对象的大小呢?
正常情况下,对象是分配在堆上。 然而,有些对象并不是分配在堆上。 如small thread-local 对象被分配在栈上或者寄存器中。
还有当前对象的状态也影响对象的大小。比如对象是否占用锁 或者 对象正在垃圾回收中。本章中讨论的是一般意义上的Java对象的大小。
1. 计算对象大小的规则
1.1 在Hotspot中,对象主要包括三部分:
对象头:
基本类型 :
对象引用类型 :占用四个字节
padding : 浪费的空间 便于对象的分配
1.2 基本类型的大小
boolean 1字节
byte 1字节
char 2字节
short 2字节
int 4字节
float 4字节
long 8字节
double 8字节
1.3 对象头的大小
记录一个对象的类 ID 和状态 (比如这个对象是否可达 锁状态) 。在Hopspot中, 正常的对象占头部需要占用8个字节。 数组占用12个字节(四个字节是数组的长度). 其它VM中都有相似的对象的头部。
1.4 对象的大小
Hotspot中,对象的大小必须是8的倍数。这意味着 :
一个空对象占用8个字节
一个仅有一个boolean值的对象 占用16个字节(8 + 1 + 7 )
一个有8个boolean值的对象,也占用16个字节。(no padding)
下一章介绍数组的大小。数组是是一种特殊的对象。在Java中,多维数组是数组的数组。例如二维数组,每一行都是独立的数组对象。
boolean 数组需要每个元素都占用一个字节。尽管每一个字节都存储1Bit。 如果存储大量的位信息,可以使用BitSet。
在C语言中,二位数组是(或者任何多维数组)实际上一维数组。而在Java中,每个多维数组实际上一组内嵌数组。
考虑10*10的整型数组,out Array :12(头部) + 4 * 10 (指向10个一维数组的引用) + 4 (Padding ) = 56 个字节
10个子数组 占用 (12 + 10 *4 + 4(Padding)) * 10 。 整个二维数组占用11 * 56 = 616个字节。 然而对于100个整型来说 ,只占用 4 * 10 * 10 = 400
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号