jvm的垃圾回收核心概念总结

背景
  1. 什么是垃圾?
  2. 如何定位垃圾?
  3. 有哪些垃圾回收算法?
  4. 垃圾回收器及其工作过程?
过程
  • 垃圾
    Student对象,持有一个Computer对象的引用。在这里插入图片描述如果在程序中执行了这样的一条语句,computer = null, 变成如下情况在这里插入图片描述如果一个对象不再被使用了,也就是对象没有被引用了,就成垃圾了。
  • 定位垃圾
  1. 引用计数算法,当一个对象被引用一次,此对象被引用的次数就加一。当对象不在被引用的时候,就会被认定为垃圾。但是,存在循环引用问题,导致全是垃圾,但是又都存在引用记录数。
  2. 根可达算法,从根对象(虚拟机栈变量,静态变量,常量池,JNI指针)开始,一层一层往下找,能找的就不是垃圾。找不到的就是垃圾。解决了,引用计数带来的问题。
  • 常见垃圾收集器回收算法 垃圾收集器具体实现过程,就是灵活组合如下三种算法
  1. 拷贝算法(Copying)
    缺陷:空间浪费。把空间一分为二(分成两部分)。从一部分拷贝到另一部分。
    优点:效率最高。空间换时间。
  2. 标记清除算法(Mark-Sweep)
    缺陷:会产生碎片。物理内存地址不连续了。工作过程就是:是垃圾的对象,直接回收即可。
    优点:空间不浪费,效率也还行。
  3. 标记压缩算法(Mark-Compact)
    缺陷:效率低。挪动对象,清除对象,压缩。
    优点:内存地址连续
  • 垃圾回收器及工作过程
    在这里插入图片描述
  1. ParNew与CMS配合使用。ParNew是年轻代的垃圾回收器。CMS是老年代的垃圾回收器。物理分代。
  2. Serial与Serial Old配合使用。Serial是年轻代的垃圾回收器。Serial Old是老年代的垃圾回收器。物理分代。
  3. Parellel Scavenge与Parellel Old配合使用。Parellel Scavenge是年轻代的垃圾回收器。Parellel Old是老年代的垃圾回收器。物理分代。
  4. G1是逻辑分代,物理不分代。
  5. 都存在Stop-the-world
  6. Serial是单个线程进行垃圾回收,适用与内存空间较小的场景。
  7. Parellel是多个线程进行垃圾回收,适用于内存空间比较大的场景。
  8. CMS是业务线程和垃圾回收线程一起工作的。因此,满足于几乎不发生卡顿的业务场景,但是CMS不是绝对不发生卡顿现象的,只是发生的概率较小而已。
小结
  • 理解java中的垃圾,及其定位算法
  • 理解常见垃圾回收算法,及垃圾收集器本身由哪些垃圾收集算法组合运用而实现的。
  • 加深对jvm的垃圾回收机制的理解,有助于对java本身运作过程的理解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值