关于java垃圾回收的小结

一、为什么要有垃圾回收

我们每次创建对象都需要在栈上开辟空间,堆上使用内存,如果我们只是开辟了这个空间,而不去释放他,那么再大的内存和空间也会有满的一天,所以我们在Java中引入了GC(垃圾回收机制)

二、GC如何确认是否是垃圾

可达性分析:以代码中的一些变量为起点,看哪些对象能被访问到,标记为可达,剩下的不可达的也就是垃圾了。

这里称为起点的变量(GCRoot),可以为栈内的局部变量,常量池中的对象,方法区中的静态引用类型的成员。

大家可以将他想成一个二叉树

不可达,就是把他们中间相互连接的这个线给抹除,无法访问

然后GC就认为2是垃圾,就会去回收他

三:GC回收的方法

Java中采用分代回收的方法

 新开辟的进程会被放在伊甸区,GC会频繁对其进行扫描

每次扫描,该进程的年龄就会增加一岁

如果到了一定的年龄,该进程任然在运行,不是垃圾,那么就会被放到扫描频率低一点的幸存区

如果在幸存区进行反复扫描依然存活

最后就会被丢到扫描频率最低的老年区

PS:一个很大的程序会被直接丢到老年区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,垃圾回收是一种自动化的内存管理机制。Java垃圾回收器负责自动检测和释放不再使用的对象所占用的内存空间,从而减少内存泄漏和手动内存管理的工作负担。 Java中的垃圾回收器使用了"可达性分析"算法来确定哪些对象是可达的(即仍然被引用),而哪些对象是不可达的(即不再被引用)。当一个对象不再具有任何引用时,它就被标记为不可达,成为垃圾对象。 垃圾回收器周期性地运行,并执行以下步骤: 1. 标记阶段:从根对象(如活动线程、静态变量等)开始,通过可达性分析标记所有可达对象。 2. 清除阶段:清除所有未标记的对象,并释放它们所占用的内存空间。 3. 压缩阶段(可选):将存活的对象向一端移动,并整理内存空间,以便更有效地利用内存。 Java垃圾回收器是基于代(Generation)的概念,将堆内存分为不同的代。通常将对象分为新生代(Young Generation)和老年代(Old Generation)。新创建的对象首先被分配到新生代,然后根据一定的策略进行垃圾回收和对象晋升到老年代。 Java提供了System.gc()方法,用于建议垃圾回收器执行垃圾回收操作,但并不能确保立即执行。 总的来说,Java垃圾回收机制使得开发人员无需手动释放内存,并可有效避免内存泄漏问题,提高了开发效率和应用程序的稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值