JVM中的对象

JVM中的对象

对象的分配
检查加载:先执行相应类的加载过程
分配内存:根据方法区的信息确定为该类分配的内存空间大小
指针碰撞(java堆内存空间规整的情况下使用)
空闲列表(java堆空间不规整的情况下使用)
上面两点存在的问题:
并发安全
解决:cas操作,分配缓存
内存空间初始化:虚拟机需要把分配到的内存空间都初始化为零值(int 为0 boolean 为false)
设置:虚拟机要对对象进行必要的设置,如,类的元数据信息,对象的hash码,对象的GC分代年龄信息
对象实例化:上面的工作完成之后,一个对象才真正的实例化

对象的内存布局:
对象头(Header):1.存储对象自身运行的数据,GC标志,对象分代年龄 2.类型指针
数据实例:
对齐填充:JVM要求对象的大小必须是8字节的整数倍,否则进行填充

对象的访问定位:
通过栈上的reference数据来操作堆上的数据,有两种,使用句柄,直接使用指针
句柄:java堆中将会划分一块内存来最为句柄池,reference中存储的就是对象的句柄地址
直接使用指针:reference中存储的就是对象地址
对于HotSpot来说,它是直接使用指针访问的

堆内存的分配策略:
新生代:
Eden区,Survivor(from)区,Survivor(to)区,默认比例是8:1:1
Eden区没有足够的空间时,虚拟机将发起一次MinorGC
对象优先在Eden区
大对象直接进入老年代:
上期存活对象进入老年区:存活年龄到达15的时候进入老年区
对象年龄动态判定:在Survivor中,相同年龄大小综合大于Survivor空间的一半,提前进入老年代
空间分配担保:HotSpot默认是开启的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

張義帥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值