OOM问题原理解析(二):JVM内存回收机制与GC算法解析

安全点safePoint (安全区域)


谈到安全点,这一点也是十分的重要,这个是了解gc垃圾回收器的核心入口之一。那么安全点通常发生在什么时机呢?

安全点是什么?

安全点其实就是gc垃圾回收的入口点,也就是gc垃圾回收器是在什么时候进行垃圾回收的!在程序中,我们可以想到,无非就是一些:常见的异常(Exception)Object = null…等等一些操作的时候。比如一个用户线程进来之后,在jvm的堆内存空间中首先会分配内存,也就是在Edan区(下面会为大家介绍)内会为新生的对象开辟内存区域,此后用户要进行一些逻辑业务操作,但是当中有些操作的时候不小心发生了Exception的时候,jvm可以在此时的用户线程中标记一个安全点。当用户线程的在栈中最后的一个栈帧彻底执行完毕的时候,那么此时,我们就可以在这条用户线程的这个点标记一个安全点。那么这个安全点将会供gc的垃圾回收器使用,回收jvm的内存。

jvm中断操作


jvm的中断操作是基于上述介绍用户线程中的safePoint的也就是,jvm的gc在进行垃圾回收之前就是要根据safePoint进行的,在gc算法中可能就是标记,清除,整理等词类,大致分为抢先式中断和主动式中断。

img

抢先式中断&主动式中断(STW)

抢先式中断

在gc回收内存之前,抢先式中断就是此时jvm会把所有的用户线程统一停止,然后迭代用户线程中的safePoint去把对应的安全区域数据存入对应的OopMap中。如果发现安全点用户线程上没有,那么久恢复用户线程。

主动式中断

主动式中断的思想就是gc需要的时候,jvm会简单的针对线程设置一个标记,用户线程自行的轮询得到gc所需的数据。

图中的GC Roots其实就是我们常在CMS和G1垃圾回收器中的所见到的可达性分析。

在这两者中的中断的意思就是我们常常听说的STW操作,也就是STOP THE WORD(静止世界)意思就是在gc回收器回收内存的时候,所有的用户线程都必须sleep活着wait起来。初学者可以以把这两种中断理解为一个同步一个异步,这样好理解一些!

有了上述的一点jvm垃圾回收概念之后,我们来聊一下jvm的垃圾回收器!

jvm垃圾回收器&算法


Serial垃圾回收器&算法

img

Serial垃圾回收器.png

Serial垃圾回收器主要采用的是gc算法中的标记复制算法以及标记整理算法。新生代中是标记复制算法,老年代中是标记整理算法。

所谓的gc垃圾回收算法,在这里也简单的为大家复现一下!

标记累加算法(jdk刚出的时候的垃圾回收算法)

标记累加算法主要的核心算法原则就是针对用户对对象的使用,有一个类似程序计数器的东西,当程序计数器到达那个值的时候将新生代中对象capy到老年代,当程序计数器为多少时(你可以理解为-负数)时将会被gc回收掉该内存。但是这个算法有很大的致命性的缺陷,那就是总会发生对象不能及时的回收或者回收出现问题等,这样就会造成jvm的内存片段,久而久之也就发生了OOM内存溢出了!

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

结尾

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

713400414533)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值