一个java对象占多少个字节的总结和理解
2018-01-26 13:59
405 查看
最近在看《深入理解Java虚拟机》和《Java并发编程的艺术》这两本书,里面都设计到了计算对象大小的内容,搞了两天终于弄清楚。
首先,参考了这篇文章《一个java对象占多少个字节?》,想彻底理解请先看篇文章,里面的工具已经验证过了,想弄明白最好自己跑一遍加深印象,看看JVM计算的和你计算的是不是一样。
接下来,上干货,各种类型分别占多少个字节(bytes):
计算方式:对象头+实例数据+对齐填充
类型占用字节数(bytes)
注意:JVM默认是开启压缩参数的-XX:+UseCompressedOops
另:
计算对象本身占用大小和对象总空间占用大小的区别:
1.本身占用大小,对象中除了基本类型之外,其他类型都按照引用来计算,不要计算引用中对象的大小。
2.总空间占用大小,要计算对象中每一个对象的大小,引用中的对象也要计算,再累加获得总空间。
第一行的文章里讲得很清晰了,以上只是总结一下,希望能帮到你。
首先,参考了这篇文章《一个java对象占多少个字节?》,想彻底理解请先看篇文章,里面的工具已经验证过了,想弄明白最好自己跑一遍加深印象,看看JVM计算的和你计算的是不是一样。
接下来,上干货,各种类型分别占多少个字节(bytes):
计算方式:对象头+实例数据+对齐填充
类型 | 64位(无压缩) | 64位(压缩) |
boolean | 1 | 1 |
byte | 1 | 1 |
short | 2 | 2 |
char | 2 | 2 |
int | 4 | 4 |
float | 4 | 4 |
long | 8 | 8 |
double | 8 | 8 |
普通对象头 | 16 | 12 |
数组对象头 | 24 | 16 |
reference(引用类型) | 8 | 4 |
另:
计算对象本身占用大小和对象总空间占用大小的区别:
1.本身占用大小,对象中除了基本类型之外,其他类型都按照引用来计算,不要计算引用中对象的大小。
2.总空间占用大小,要计算对象中每一个对象的大小,引用中的对象也要计算,再累加获得总空间。
第一行的文章里讲得很清晰了,以上只是总结一下,希望能帮到你。
相关文章推荐
- JAVA基础—一个对象占用多少字节
- 一个java对象占多少个字节?
- C++中一个class类对象占用多少内字节
- 一个对象占用多少字节?
- JAVA 一个对象消耗了多少内存
- 【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集
- 转载: C++中一个class类对象占用多少内字节
- 关于String s1 = new String("abc") 创建一个对象问题和Java常量池总结
- java中如何理解多个对象共享同一个静态成员变量(多个实例的static变量会共享同一块内存区域)
- C++中一个class类对象占用多少内字节
- C++中一个class类对象占用多少内字节
- java类中创建一个自身的静态对象,如何理解不会无限创建导致堆溢出
- 看think in java 4th持有对象一章的Map小结,因为一个例子,重新总结下hashCode()和equals(),加深印象。
- 查看java对象占堆内存多少个字节
- JAVA内存使用--如何计算一个Java对象占用的字节数
- [转载]一个对象占用多少字节?
- java 中关于数组,对象,字符串分别占多少字节的问题
- 黑马程序员_Java第21天知识总结对象流_管道流_RandomAccessFile_数据流_字节数组流
- C++中一个class类对象占用多少内字节
- 一个菜鸟对 java 类和对象的理解