众所周知,在java语言中,内存分配和回收是由jvm自动管理的。因此内存的分配和回收也是jvm三大功能之一。垃圾收集器(GC)需要完成三件事情: 哪些内存需要回收? 什么时候进行回收? 如何回收? 本篇博客将解答jvm是如何处理以上三个问题的。值得注意的是,java运行时数据区中的程序计数器,虚拟机 ...
分类:
其他好文 时间:
2018-09-02 02:09:42
阅读次数:
179
JVM垃圾收集器 CMS 收集器 CMS(Concurrent Mark Sweep),从 Mark Sweep 可以知道它是基于标记-清除算法实现的。 特点:并发收集、低停顿。 分为以下四个流程: 1.初始标记:仅仅只是标记一下 GC Roots 能直接关联到的对象,速度很快,需要停顿。 2.并发 ...
分类:
其他好文 时间:
2018-08-11 01:19:22
阅读次数:
144
呃。HotSpot VM的GC组老人之一Jon Masamitsu很久之前就写过blog讲解这个:https://blogs.oracle.com/jonthecollector/entry/our_collectors 简单来说,有这么多东西反映了HotSpot VM的开发历史和实现细节。我在写篇 ...
分类:
其他好文 时间:
2018-07-28 11:56:02
阅读次数:
374
垃圾回收算法的好坏直接影响到程序运行效率,接下来对几种常见的回收算法进行介绍。 标记 清除算法(Mark Sweep) 该算法是最基础的收集算法,算法分“标记”和“清除”两部分。 回收过程是标记出需要所有需要回收的对象,在标记完成后统一回收被标记的对象 不足 1. 标记和清除两个过程效率并不高。 2 ...
分类:
编程语言 时间:
2018-07-14 20:02:54
阅读次数:
175
JVM垃圾收集器、垃圾收集算法、无用对象(如何判断对象可以回收) ...
分类:
编程语言 时间:
2018-07-07 20:10:11
阅读次数:
178
判断对象是否存活的方法: 1、引用计数算法:给一个对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,引用失效时,计数器减1,当引用数量为0时,任务对象已经死了 缺点:当对象之间存在相互循环引用时,引用计数算法无法通知GC收集器回收 2、可达性分析算法:判断一个对象到GC ROOTS是否 ...
分类:
其他好文 时间:
2018-07-02 21:33:43
阅读次数:
211
1.根搜索算法 1.可达性分析算法 该算法是用来判断一些对象是否存活的,这个算法的起点就是图中的GC Root,,从根开始往下搜索,搜索走过的路径称之为“引用链”,如果一个对象到根节点没有任何一条引用链的话,就说明这个对象是要被回收的。 如图,Object5、Object6、Object7虽然他们互 ...
分类:
其他好文 时间:
2018-06-26 01:10:00
阅读次数:
191
一.GC收集的工具 1.Servial收集器 特点:历史悠久,单线程收集,复制算法,,stop the world,收集新生代,简单高效,专心收集,没有线程切换开销 用在Client模式下是一个非常好的选择。 2.ParNew收集器 特点:就是serial收集器的多线程版本,可控参数回收算法都与se ...
分类:
其他好文 时间:
2018-06-22 01:03:05
阅读次数:
157
对象已死么? 判断一个对象是否存活一般有两种方式: 1、引用计数算法:每个对象都有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1。计数为0时可以回收。 2、可达性分析算法(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对 ...
分类:
编程语言 时间:
2018-04-14 18:04:40
阅读次数:
228
JVM——垃圾收集器总结 一、垃圾收集器概览 收集算法是内存回收的方法论,垃圾收集据是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现没有规定,不同的厂商、不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,一般都会提供参数供用户根据自己的所用特点和要求组合出各个年代所使用的收集器。 ...
分类:
编程语言 时间:
2018-01-21 12:29:15
阅读次数:
126