hjr-JAVA 完整的说一下垃圾回收

内存模型

Java的内存模型有两种
1、JVM分为堆内存和桟内存,堆中存放程序员创建的对象,桟存放执行的方法信息,局部变量和参数等
堆内存所有线程共享,桟每个线程维护各自的内存空间互不影响
所以Java的内存模型是线程安全的

2、多线程共享变量,在主内存里存储的同时,每个线程维护各自的虚拟内存保存该变量副本,优先操作虚拟内存的变量副本,再异步更新主内存,才是JVM内存模型把

垃圾回收

判断算法

引用计数法和可达性分析算法判断,当对象不再被Java程序所引用时,
等待被回收

引用计数方法 + 可达性分析算法是用来判断对象是否处于非活跃状态

引用计数方法:当对象被引用+1,释放引用-1,为0标记为非活跃
可达性分析算法:解决引用计数循环引用问题,即便对象a和b相互引用,只要从GC Roots出发无法到达a或者b,那么可达性分析便不会将它们加入存活对象合集之中。

回收算法

复制,标记清除,标记整理,是用来具体做回收的算法

复制;AB相等的内存,A用来使用,B用来把A的所有活跃对象转移并存储,然后清空A

标记清除:它通过标记所有可达对象,然后清除所有未标记对象的方式进行回收

标记整理:它通过标记所有可达对象,然后让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

回收时机

当JVM判断堆内存空间不足的时候,会使用垃圾回收器,使用判断算法判断哪些对象可以被回收,再使用垃圾回收算法进行具体的回收操作

回收流程

初始标记->并发标记->回收/整理回收

收集器

一般有四种 S P CMS G1
串行 并发 并行并发

1、 使用范围不一样
CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用
G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用

2、 STW的时间
CMS收集器以最小的停顿时间为目标的收集器。

G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)

3、垃圾碎片
CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片

G1收集器使用的是“标记-整理”算法,进行了空间整合,没有内存空间碎片。

4、CMS会产生浮动垃圾

5、
CMS回收垃圾的4个阶段
初始标记
并发标记
重新标记
并发清理

G1回收垃圾的4个阶段
初始标记
并发标记
最终标记
筛选回收

CMS和G1都是并行并发收集,CMS侧重于尽可能减少主程序停顿时间,G1侧重于设置提前可预知的停顿时间

CMS适合小于6G的回收
G1适合大于6G的回收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师小侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值