JVM学习之路(二)

本文深入探讨了JVM中的垃圾回收机制,包括不同代的内存管理方式、自适应分代垃圾回收器的工作原理,以及年轻代、年老代和永久代各自的回收策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM学习之路(二)


GC
    垃圾回收机制是由垃圾回收器Garbage Collection GC来完成的,GC是后台的守护线程,优先级比较低,可以根据内存的使用情况动态的调整其优先级。
    垃圾回收机制调用之前,还会有有一些清理工作。垃圾回收只能回收通过new关键字申请的内存(堆内存),但是堆上的内存并不完全是通过new分配的。还会有一些本地方法的调用,这部分特殊的内存,如果不通过手动释放,就会导致内存泄漏。GC是无法回收这部分内存的,所以需要在finalize中用本地方法(native method)如free操作等,再使用gc方法。显示的GC方法System.gc()
自适应的、分代的、停止-复制、标记-清扫式垃圾回收器
    1.新生代Young generation
        a.Eden space任何新进入运行时数据区域的实例都会存放于此
        b.S0 Survivor space存在时间较长,经过垃圾回收没有被清除的实例,就从Eden 搬到了S0
        c.S1 To Space 同理,存在时间更长的实例,就从S0 搬到了S1
    2.旧生代Old generation/tenured
        同理,存在时间更长的实例,对象多次回收没被清除,就从S1 搬到了tenured
    3.永生代Perm
        存放运行时数据区的方法区

不同的世代采用不同的回收机制

    新生代的对象回收采用Copying算法,因为新生代中每次垃圾回收都要回收大部分对象,也就是说需要复制的操作次数较少。将原本 Survivor 内经过多次垃圾收集仍然存活的对象移动到 Tenured。
    旧生代的特点是每次回收都只回收少量对象,一般使用的是Mark-Compact算法。它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存。
    永久代(Permanet Generation),它用来存储class类、常量、方法描述等。对永久代的回收主要回收两部分内容:废弃常量和无用的类。

分代垃圾回收

注:java垃圾回收机制与相关的算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值