创建对象如何在堆区分配内存

什么是堆区?

堆区是JVM中线程共享的区域,堆区中几乎存放了所有的对象实例。

什么是老年代什么是新生代

老年代和新生代 是基于堆区垃圾回收进行的分区 

老年代占堆区的2/3,新生代占堆区1/3

分配内存的流程(强引用)

每当创建对象时,会将新对象加入新生代的Eden区,如果Eden区放不下,会触发YGC的垃圾回收机制,然后再次判断Eden区能否放下,如果可以放下则分配内存空间,如果放不下则尝试将对象放到老年代OLD区中,如果老年代放不下,则触发FGC的垃圾回收机制,然后再次判断老年代能否放下,如果可以放下则分配内存空间,否则抛出错误OOM!

特别的是

在这个过程中,当YGC执行完成时,Eden区幸存的对象(旧对象)幸存者Survivor区能否放下,如果放不下则直接移到老年代,如果能放下则会放在幸存区的from或to空间中,并且from和to空间会不断更替,而在更替过程中,GC也会判断是否有垃圾,如果有则清除,并且每更替一次,对象年龄加一,当对象年龄大于默认值15时,会将对象移到老年区。这就是一个对象在堆中分配内存的完整流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值