Java 垃圾回收

来源:互联网 发布:ubuntu接口配置ip地址 编辑:程序博客网 时间:2024/06/08 04:11

温故而知新。


这些知识是很久之前看一个视频记得,有些零碎。


GC 概念和算法:


GC (Garbage Collection) 垃圾收集 (1960年list就使用了GC)

Java中 GC的对象是堆空间和永久区。


GC的一些算法机制:

1. 引用计数法(老牌的垃圾回收算法)   Java并没有使用这种算法

通过引用计数来回收垃圾,当一个对象没有被其他对象引用的时候就把它当成是垃圾,不过这种算法很难处理循环引用(如果几个都没有用的对象相互引用就不能被回收了)。


2.标记清除法(现代垃圾回收算法的基础思想)

分为两个阶段 ,标记和清除

标记:从根节点开始搜索,没有被遍历到的就当成是垃圾。

清除:标记之后,没有被标记的对象就会在这个阶段被清除。


3.复制算法(相对标记清除高效,不适用于存活对象多的场合,缺点就是空间浪费 )

将原有内存空间分为两块,用的时候只用一块。清除的时候将存活的对象复制到未使用的内存空间,清除正在使用的那一块内存空间。交换两个内存角色即可。            (老年代和大对象不复制, 整合标记清理思想)

4.分代思想 根据对象存活的周期分类,短命对象归为新生代,长命对象归为老年代。
少量对象存活,适合复制
大量对象存活,适合标记或者标记压缩

Stop-The-World
Java中一种全局暂停的现象
多半因为GC引起(其他: Dump线程 死锁检查 堆Dump也有较小的可能)

危害:长时间服务停止,无响应 。  可能引起主备切换,数据不同步。

***************************************************************************************************

GC 参数:

都是新生代复制算法 老年代标记-压缩

串行收集器:(单线程)
最古老,最稳定,效率高,会产生较长的停顿

并行收集器:(多线程(多核支持))
 新生代并行 老年代串行
 多线程并发 应用程序暂停

Parallel收集器(更加关注吞吐量)

CMS收集器(Concurrent Mark Sweep并发(与用户线程一起执行)标记清除 )
停顿时间短 吞吐量变低 清理不彻底 
老年代收集器

此文更多的是为了巩固自己已学知识,如有不正确的地方,欢迎指出。

1 0
原创粉丝点击