JAVA初识垃圾回收机制

垃圾回收器负责回收所有“不可达”对象的内存空间即没有使用的内存空间

垃圾回收算法一般要做两件基本事情:

 1. 发现无用的对象
 2. 回收无用对象占用的内存空间

垃圾回收机制保证可以将“无用的对象进行回收”,无用的对象指没有任何变量引用该对象。

垃圾回收相关算法

  • 引用计数法:堆中每一个对象都有一个引用计数,被引用一次计数+1,被引用变量值为null计数-1,直到计数为0,则成为无用对象。优点是算法简单,缺点是循环引用的无用对象无法被识别。
  • 引用可达法(根搜索算法):把所有引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的节点寻找完毕,剩余的节点则被认为是没有被引用到的节点,即无用的节点。

分代垃圾回收机制

  • 年轻代(Eden):对应Minor GC,每次Minor GC会清理年轻带的内存,算法采用效率较高的复制算法,频繁操作但是会浪费内存空间,当年轻代区域存放满对象后,就将对象存放到老年代区域。
  • 年老代(Survivor):老年代越来越多会启用Major GC和Full GC(全量回收)来一次大扫除,全面清理年轻带区域和老年代区域
  • 持久代(Tenured/old):用于存放静态文件、java类、方法等,持久代对垃圾回收没有影响。

垃圾回收过程

  • 新创建的对象,绝大多数会存储在Eden中
  • 当Eden满了或达到一定比例后不能创建新对象,则触发垃圾回收机制(GC),将无用对象清理掉,然后剩余对象复制到survivor中,加入s1区域。
  • 当Eden中再次满了,会将s1中不能清空的对象再存到另一个survivor区域比如s2,同时将Eden中不能清空的对象复制到s1中
  • 重复多次Survivor中没有被清理的对象时,则会复制到老年代Old区中
  • 当Old区满了,则会触发一次完整的垃圾回收(Full GC)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值