JVM | 老婆孩子热炕头-GC收集器概念篇

本文知识点

  • STW(Stop the world)的概念

  • 安全点的概念

  • GCRoots的概念

  • Remember Set (记忆集)

本篇内容以概念为主,先了解概念,知道有哪些名词,东西, 再实战看里面的东西去加深理解

GC总述

java在运行时,生成的对象都在堆里存放着,有些对象的生命周期很短,只几行代码运行完就没用了.没用了之后不能放任他在堆里, 要进行回收,把空间空出来,给后面的对象.

我们常用收拾屋子来比喻jvm清理堆.这里, 我们不仅仅有个房子, 我们还可以想得再大胆一些,天降一女侠当老婆,是家里的一把手,掌管整个家. 不久,又天降一大胖小子, 小子性格独立,也有自己的一块小空间.然后小刀就要开始打扫卫生,收拾房子了!

GC相关概念

STW(Stop the world)

于生活中, 就是我要开始打扫卫生了, 大家先别动,让我看看哪些东西是现在女侠和小子没有在用的,又散落在外面占用空间, 当然我也不敢让她们停太长时间, 所以趁他们停下来的时候,赶紧扫一眼,先把他们手上没有用到的东西记下来, 然后赶紧让她们继续玩乐.

于JVM中,就是应用先停下来,然后GC工作线程,赶紧扫描一遍,看看哪些对象是还有用,哪些是没用的

安全点

这里其实是两个概念, 一个是安全点, 一个是安全区域. 都是描述STW发生的时机, 要让STW发生的时候,系统的对象引用关系不会改变.

在我要喊停女侠和小子的时候, 如果我一喊相当于按了定时器,把她们都定住了,然后我发现女侠还在倒水, 不太好, 只先解锁女侠的锁定, 让她倒完水再停. 这是抢先式中断现在生活中, 很少有这样的.

更多的场景是, 她们的耳朵一直听着我有没有说话(轮询状态), 我一喊停. 然后她们赶紧把手里面的活停下来,或者去沙发坐着,或者去床上躺着等自己最近的安全点上主动停下.

安全区域: 如果我喊停的时候, 小子刚好在睡觉(线程在休眠,或者阻塞). 虽然没有听到我喊的停,但也是安全的.

GCRoots

有句话说是, 擒贼先擒王,要抓住事物的主要矛盾! 当家里的东西很乱的时候, 要问问女侠和小子是怎么回事, 过去一看, 好家伙, 原来女侠在教小子识物学字. 学一个字,找一个对应的物品. 这时候, 本扫地的只要拿着那个小本子看一看, 就能顺着找到哪些是要用的 ,哪些是已经没用的了.

在JVM中, 有一个根对象的概念, 就是堆里面的东西和他们有关系的就是要用的, 没有关系的,就是可以回收的了.我们来这样分类记忆

先是和类相关的:

  1. 类静类属性引用的对象

然后是和实例相关的:

  1. 虚拟栈中使用到的参数,局部变量,临时变量

  2. JNI中引用的对象

然后是JVM层面的:

  1. 常量引用的对象,如字符串常量池里的引用

  2. 所有被synchronized 持有的对象

  3. 虚拟机内部的引用,如Class对象, 常驻内存的异常对象,系统类加载器等等

RemberSet 记忆集

纵观现在对大数据量的处理,大都是分而治之, 划区而治. 那区与区之间不可能为了查A区的某条信息,把整个B区都查一遍.

如小刀我现在在上海工作, 女侠在成都.那么在上海就会有个记忆集,里面存着, 有成都某某区某某街(精确度有不同的实现)到小刀的一条引用关系.

那哪一天上海要统计人员的时候, 来找到小刀了, 我说我在成都哪里哪里还有人, 那统计人员就到那个区域查一查, 看我有没有说慌.  如确实有引用关系, 好,那小刀还有人关心着, 让他继续工作吧. 要是一查,发现没有这个引用关系, 得了, 没人要的小刀, 可以关进小黑屋喽~!

总结

本篇是纯理论知识,但理论也是从生活中总结出来的. 因此在学习时,还是要多多联系实际, 概念记不住,我们就记生活场景! 加油!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值