文档章节

JVM学习(2)-JVM垃圾回收算法

haoran_10
 haoran_10
发布于 2016/07/15 16:37
字数 814
阅读 8
收藏 0

java虚拟回收垃圾对象时,一份分为两步:

1、虚拟机在回收堆空间在之间,会先判断哪些对象已经死亡;

2、然后再对这些死亡对象通过特定的回收算法进行回收

 

一、判断对象是否死亡

1、引用计算器算法

给对象添加一个引用计算器,如果其他地方引用它,计算器就加1,当引用失效时,计算器就减1。当计算器为0时,这个对象不能被再次使用,需要被回收了。

优点:实现简单

缺点:不能解决对象之间相互循环引用的问题。

 

2、根搜索算法GC Roots Tracing

通过一系列的名为GC Roots作为对象为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连,也就是不可达(图论中迪杰斯特拉算法),证明此对象是不可用的。

在java语言里,可作为GC Roots的对象包括以下几种:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象
  • 方法区中的类静态属性引用的对象
  • 方法区中的常量引用的对象
  • 本地方法栈中JNI(即一般说的Native方法)的引用的对象

ps:会进行二次判断,在判断对象为死亡对象后,虚拟机会吧对象放到F-QUEUE队列里,然后启动一个线程去扫描,如果发现扫描后依然没有被引用,那么就直接回收了。

 

 

二、垃圾回收算法

1、标记-清除算法

分为标记和清除两个阶段,首先标记处需要清除的对象,标记完成之后统一回收掉所有被标记的对象。

缺点:效率低,造成碎片比较多

 

2、复制算法

把可用内存分为相等的两份,每次只是用一块。当这一块内存用完了,就把所有的存活的对象都复制到另外一份内存块中,然后一次性全部把这块内存清除掉。

现在很多虚拟机就是采用这种方式回收新生代。新生代分为一块大的Eden空间,和两块小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,把Eden和Survivor还存活的对象一次性全部拷贝到另外一块Survivor空间上,最后清理掉Eden和刚才使用的Survivor空间。如果Survivor空间不够时,会向老年代进行借一部分内存。

优点:简单高效,碎片率也比较低。

 

3、标记-整理算法

如果存活率比较高,那么使用复制算法就不适用。

把所有的存活对象都往前端转移,然后直接清理掉端边界以外的内容。 

针对老年代使用。

 

4、分代收集算法

现在的虚拟机一般都是采用这种方式。

把java堆分为新生代和老年代,新生代则采用复制算法,老年代则采用标记-整理算法。

 

© 著作权归作者所有

共有 人打赏支持
haoran_10
粉丝 25
博文 88
码字总数 80846
作品 0
杭州
程序员
私信 提问
JVM系列第8讲:JVM 垃圾回收机制

在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由《Java 虚拟机规范》指定的,每个 Java 虚拟机可能都有不同的实现。其实涉及到 Java 虚拟机的内存,就不得不谈到 Ja...

陈树义
2018/11/21
0
0
Java的垃圾回收之算法[转]

引言 Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等...

kext
2012/03/20
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

聒小小噪
2018/05/12
0
0
Java虚拟机基础——4内存回收机制

Java虚拟机整体篇幅如下: Java虚拟机基础——1Java的内存模型 Java虚拟机基础——2JVM运行时数据区 Java虚拟机基础——3类加载机制 Java虚拟机基础——4内存回收机制 本篇文章的内容如下: ...

隔壁老李头
2018/10/03
0
0
一篇简单易懂的原理文章,让你把JVM玩弄与手掌之中

jvm原理 Java虚拟机是整个java平台的基石,是java技术实现硬件无关和操作系统无关的关键环节,是java语言生成极小体积的编译代码的运行平台,是保护用户机器免受恶意代码侵袭的保护屏障。JVM...

烂猪皮
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js之正则表达式修饰符/ig

正则表达式中/i,/g,/ig,/gi,/m的区别和含义 /i (忽略大小写) /g (全文查找出现的所有匹配字符) /m (多行查找) /gi(全文查找、忽略大小写) /ig(全文查找、忽略大小写) 修饰符 修饰符 描述 i ...

youfen
32分钟前
1
0
druid架构及原理

应用场景 设计一个系统来预估未来一年的广告流量,不是总流量,是任意时间段任何定向(Targeting)条件约束情况下的流量。定向条件有近百种(内容类别,设备平台,用户地域,用户人口属性等),...

hblt-j
39分钟前
3
0
solr使用

solr 7.3安装配置、中文分词配置 solr7.4 配置ikanalyzer和自带的中文分词器

微小宝
47分钟前
1
0
常用的HTTP方法有哪些?

1、常用的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器 POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方...

晚风0623
59分钟前
2
0
windows系统使用技巧

windows使用一段时间,系统盘剩余空间会变小,如下目录可以删除,清理出一些物理空间。 1.将桌面文件移动到其他硬盘。 2.【下面目录下的文件都是可以删除的】 C:\Users\dell\AppData\Local\...

硅谷课堂
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部