通过前面的课程,我们学习了“内存溢出”和“内存泄漏”的区别。
简单来说,Java 中的内存溢出就是内存不够用,一般是堆内存报错,当然也可能是其他内存空间不足引起的。
下面我们详细讲解 Java 对象的内存相关知识。
Java 对象内存布局简介
请思考一个问题: 一个对象具有 100 个属性,与 100 个对象每个具有 1 个属性,哪个占用的内存空间更大?
为了回答这个问题,我们来看看 JVM 怎么表示一个对象:
说明
- alignment(外部对齐):比如 8 字节的数据类型 long,在内存中的起始地址必须是 8 字节的整数倍。
- padding(内部填充):在对象体内一个字段所占据空间的末尾,如果有空白,需要使用 padding 来补齐,因为下一个字段的起始位置必须是 4/8 字节(32bit/64bit)的整数倍。
- 其实这两者都是一个道理,让对象内外的位置都对齐。