JVM学习笔记20-内存结构,内存回收和空间分配担保

本文深入探讨Java内存管理机制,包括内存结构如堆、栈的分配策略,以及不同引用类型的内存回收细节。同时,解析了空间分配担保机制在MinorGC前如何确保安全性,以及在特定条件下触发FullGC的原理。

1.内存结构

如下图所示
JVM内存结构

  1. 堆上分配
    大多数情况在Eden上分配,偶尔直接在Old上分配
    其细节取决于GC的实现
  2. 栈上分配
    原子类型的局部变量

2 内存回收

2.1 引用类型

GC要做的是将那些消亡对象所占用的内存回收掉

  • Hotspot认为没有引用的对象是消亡的
  • Hotspot将引用分为四种
    • Strong—强引用
      即默认通过Object obj = new Object这种方式赋值的引用
    • Sotf—软引用
    • Weak—弱引用
    • Phantom—虚引用

Sotf,Weak,Phantom这个三种都是继承Reference

2.1 内存回收

Full GC会对Reference类型的引用进行特殊处理

  • Soft—内存不够时一定会被GC,长期不用一定会被GC
  • Weak—一定会被GC,当标记为消亡时,会在ReferenceQueue中通知
  • Phantom—本来就没引用,当前JVM 堆中释放时会通知

3 空间分配担保

在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间,如果这个条件成立,那么Minor GC可以确保是安全的

当大量对象在Minor GC后仍然存活,就需要老年代进行空间分配担保,把Survivor无法容纳的对象直接进入老年代

如果老年代判断剩余空间不足(根据以往每一次回收晋升到老年代对象容量的平均值作为经验),则进行一次Full GC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值