支付宝一面:一个 Java 对象到底有多大?被问傻眼了!!
Java专栏
共 4480字,需浏览 9分钟
·
2023-11-10 17:45
来源:http://blog.lichengwu.cn/
一个Java对象到底有多大?
Java对象结构
-
Object Header -
Class Pointer -
Fields
hash(25)+age(4)+lock(3)=32bit
unused(25+1)+hash(31)+age(4)+lock(3)=64bit
2024最新架构课程,对标培训机构
/**
* The value of the <code>Integer</code>.
*
* @serial
*/
private final int value;
4(object header)+4(pointer)+4(length)+4*10(10个int大小)=52byte 由于需要8位对齐,所以最终大小为`56byte`。
节约内存原则
1)尽量使用基本类型,而不是包装类型。
2)斟酌字段类型,在满足容量前提下,尽量用小字段。
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer.
*/
private transient Object[] elementData;
/**
* The size of the ArrayList (the number of elements it contains).
*
* @serial
*/
private int size;
3)如果可能,尽量用数组,少用集合。
数组中是可以使用基本类型的,但是集合中只能放包装类型!
4)小技巧
-
时间用long/int表示,不用Date或者String。 -
短字符串如果能穷举或者转换成ascii表示,可以用long或者int表示。
总结
评论