美文网首页
javaGC垃圾收集器相关算法

javaGC垃圾收集器相关算法

作者: Carver_c5f0 | 来源:发表于2017-08-17 09:31 被阅读0次

      说起java垃圾收集器大家估计都没什么印象其实就是GC嘛,笔试GC题目被虐无数次,我没看java虚拟机的时候我也不知道是怎么,在这里顺便跟大家推荐一本书吧,《深入理解java虚拟机》好啦废话少说还是进入正题吧。

一.GC介绍

    GC垃圾收集器是java虚拟机上实现内存回收技术的,它跟c++的不一样,c++没创建一个对象都需要对生命周期结束的对象进行free处理来释来放内存空间,而java内存回收机制更加灵活,它会自动回收内存的垃圾,让开发者更关注业务流程。

二.GC对象存活判断算法

GC在内存回收垃圾的时候,会先判断对象是否存活,还是挂掉了,并且回收挂掉的对象。

在虚拟机中对象存活判断方法主要有两种:引用计数算法(不属于jvm HotSpoot的方法)和可达性分析方法(属于JVM的方法)。

引用计数算法:

引用计数算法的原理是这样的:为对象设置一个计数器,当一个地方引用的时候就+1,当引用失效的时候就-1,当计数器的值为0的时候就开始回收内存空间。在这里是不是觉得它是一个很好的算法,但是一般不会用在java虚拟机上,因为如果存在循环引用的话就会永远释放不了内存。下面举个例子:

public classMyObject {

public Objectref=null;

public static void main(String[] args) {

MyObject myObject1 =newMyObject();

MyObject myObject2 =newMyObject();

myObject1.ref= myObject2;

myObject2.ref= myObject1;

myObject1 =null;

myObject2 =null;

}

}

在这个例子里面存在myObject1.ref= myObject2; myObject2.ref= myObject1;的相互引用,这样计数器永远不会为0.所以无法使用引用计数算法来进行回收这部分的内存。

可达性分析算法:

可达性分析算法是根据“GCroot”的对象作为起点分析对象是否可用的,而根据这个结点往下搜索,搜索所走的路径为引用链,如果不在这个链中的话(就是GCroot到这个对象是不可到达的话,那么证明这个对象是不可到达,可以进行回收)

根据上图可以知道object5,6,7都是不可到达的,那么判断其为可回收对象,而在引用的过程,有一些引用对象存在意义不大,就好像是“食之无味,弃之可惜”的对象,在内存使用比较紧张的时候可以进行回收,这里可以看一下关于引用类型(关于强引用,软引用,弱引用,虚引用)的文章地址为:http://blog.csdn.net/kuiyi3269/article/details/77284737

相关文章

  • javaGC垃圾收集器相关算法

    说起java垃圾收集器大家估计都没什么印象其实就是GC嘛,笔试GC题目被虐无数次,我没看java虚拟机的时候...

  • G1垃圾收集器实现原理

    1 与垃圾收集器有关的算法 在分析G1前先简单回顾一下与垃圾收集器相关的算法。通常所谓的垃圾收集器更多地是指跟踪垃...

  • JVM第四天-垃圾收集器

    一、垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同...

  • 内存回收策略

    本文主要内容 对象已死 引用 垃圾收集算法 垃圾收集器 本文主要从概念上介绍内存回收及垃圾收集器相关内容,不涉及具...

  • Java虚拟机内存管理(五)-垃圾收集器

    5、垃圾收集器 前面的算法都是理论知识,而垃圾收集器是这些算法实现。 不同版本的 JDK 选择的垃圾收集器也可能不...

  • 垃圾收集器

    简介  垃圾收集器是垃圾收集算法的具体实现,各种垃圾收集器没有好坏之分,适合自己当前应用的垃圾收集器才是最好的垃圾...

  • 垃圾收集器整理&Java8默认垃圾回收器

    垃圾收集器整理 1.Serial 垃圾收集器(单线程、复制算法) 2.ParNew 垃圾收集器(Serial+多线...

  • 第三章(二)GC

    本篇主要讲 垃圾收集算法 、 HotSpot的的算法实现 和 垃圾收集器。 垃圾收集算法 标记-清除算法 Mark...

  • Java虚拟机(三)垃圾标记算法与Java对象的生命周期

    相关文章Java虚拟机系列 前言 这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法...

  • JVM堆的分配和回收

    1. 内存分配 现代收集器基本都采用分代收集算法 1.1 概述 垃圾收集 垃圾回收 垃圾收集器 GC 算法是内存回...

网友评论

      本文标题:javaGC垃圾收集器相关算法

      本文链接:https://www.haomeiwen.com/subject/ghtgrxtx.html