1 内存布局
Java对象内存布局:
对象头 + 实例数据 + 对齐padding
note:对齐padding是这个内存对象布局计算padding的,和对象头没有关系
1.2 指针压缩
除了classPointer还能压缩哪些内容, 数组的对象头中的表示长度的为啥也能压缩???
note:指针压缩对于jdk1.8是默认开启的,实验的不用时去开启
1.3
2 对象头
64位机器:
| 非压缩(byte) | 压缩 | detail(压缩) |
---|---|---|---|
普通对象 | 16 | 12 | markword(8) +classPointer(4) |
数组对象 | 24 | 16 | markword(8) +classPointer(4) + length(4) |
数组对象比普通对象多了数组长度四个字节,对象头的具体内容
1 对于有些人说的 数组对象等于 8 对象头+ 4 length + 4对齐 感觉从概念上来说混乱,而且对齐是整个对象层面的对齐和对象头没啥关系。
2 classPointer,就是对象指向该对象所属类的指针,这样才能判断一个对象的所属类型
3 复合对象内存大小计算
-
原生类型就是本身的大小
-
引用类型四个字节大小
-
静态属性是从归属上来说是属于类的,其大小不算到对象大小中
4 实践
1 使用Lucene工具类
2 使用Java agent
9 实验
// todo
0 参考资料
http://www.importnew.com/14948.html
对象内存布局 https://juejin.im/entry/5841381cac502e006b96699f
Java对象内存布局 http://www.ideabuffer.cn/2017/05/06/Java%E5%AF%B9%E8%B1%A1%E5%86%85%E5%AD%98%E5%B8%83%E5%B1%80/