垃圾回收的基本知识

一、什么样的对象需要回收

1、引用计数回收方式

oc中的回收机制,采用引用计数的方式,引用为0的时候回收对象。此方法易造成循环引用内存泄露

2、可达性回收方式

引用链没有被GC Root对象引用的对象,被当成无用对象进行回收。
GC Root:虚拟机栈,本地方法栈,方法区引用的对象

二、回收的算法

1、标记-清除

扫描内存,发现可回收的对象进行标记,然后清除。
确定易造成内存碎片

2、标记-整理

将需要回收的对象清除后,内存统一向左移动解决内存碎片的问题。
但是每次整理消耗性能严重

3、复制

将内存按1:1分为两部分,一块使用一块空闲,每次清除时将有用的对象复制到空闲区。统一清除使用区的数数据后,将空闲区转换成使用区

4、分代收集法

将内存分为:新生代,老年代,永生代
新生代分为8:1:1三块,将有用的对象复制到小的两块上,大的清除。小的都满了只后移动到老年代区域。
新生代一般采用复制清除,老年代采用标记-整理

三、发生内存清理的时间

新生代,老年代,永久代,某一个内存溢出。
申请内存失败会发生gc
主动调用gc
程序空闲时间

安全点:程序执行跳转,方法调用,循环分支语句的时候,可以Stop-The_World GC
安全区域:程序没有执行的时候,线程处于sleep状态或者blocked状态的时候,这时线程无法响应jvm的中断请求

四、常用的垃圾收集器

1、新生代收集器:

Serial:单线程串行收集器,复制算法,清理时会Stop-The-World
PraNew:Serial的多线程版。算法模式类似上
Parallel Scanvenge :高吞吐量

2、老年代收集器:

Serial Old:单线程串行收集器,作为CMS的后备方案
CMS:并行收集器,收集过程(只能和Serial、PraNew配合使用)
1.初始标记
2.并发标记
3.重新标记
4.并发清除

Parallel Old:老年代多线程标记整理算法

G1:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供...
    简欲明心阅读 90,327评论 17 311
  • JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的...
    cocohaifang阅读 1,821评论 0 7
  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 2,321评论 0 7
  • 我曾学过“一屋不扫何以扫天下”这句话,也知道这句话的意思,最近遇到一些事,让我想起了这句话。 其一,...
    如我所wen如我所jian阅读 337评论 0 0
  • 皎月银天,天堂上星光点点,在人间银光洒洒;广袤的天空,因为无云,更显高阔;空荡的山谷,因为无声,更显寂静。 苍鹰矗...
    陈大仙儿阅读 591评论 0 0

友情链接更多精彩内容