关于JVM个人浅谈(三)

在上一篇中,大致讲述了GC回收的算法,接下来就在本篇文章里介绍一下如何去预估Java对象的大小,以便后续再优化JVM提供数据理论基础。

一个普通对象的内存大小如下:

1._mark对象头 占用8byte;

2.oop指针,默认占用4byte;

3.数据区 具体根据对象属性而定;

4.padding,内存对齐(如果不懂,可以看看计算机组成原理 这本书 大学计算机系必修之一) Java以8的倍数对齐


一个普通的数组内存大小如下:

1._mark对象头 占用8byte

2.oop指针,默认占用4byte

3.数组长度,占用4byte

4.数据区 具体数组对象大小而定

5.padding,内存对齐 也是以8的倍数


下面我们举个例子:

package com.object.test;

public class ObjectSize {

	private String	b;	// 4byte;
	private int     a;      // 4byte;
	private short	c;	// 2byte;
	private Object	d;	// 4byte;

}

这样一来该对象的大小等于(这里需要注意的是 内存排序方式是从长到短,引用最后):

总大小是: 8(mask)+4(oop)+4(a)+2(b)+2(padding)+4(b)+4(padding)=28;

这样一个对象占用了28个byte。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值