编写Java代码的时候,大多数情况下,我们很少关注一个Java对象究竟有多大(占据多少内存),更多的是关注业务与逻辑,但是殊不知,在我们不经意间,大量的内存被无形地浪费了。
想要精确计算一个Java对象占用的内存,首先要了解Java对象的结构表示。
1.Java对象结构
一个Java对象在Heap(堆)的表示,可以分为三个部分:
Object Header(头信息)
Class Pointer(指针)
Fields(字段属性)
1.1 Object Header
每个普通Java对象在堆(Heap)中都有一个头信息(Object Header),头信息是必不可少的,记录着对象的状态和一些锁信息。
头信息在32位系统和64位系统占用空间不同,在32位中:
hash(25)+age(4)+lock(3)=32bit
64位中:byte
unused(25+1)+hash(31