深入理解java虚拟机(四)垃圾收集算法及HotSpot实现
垃圾收集算法 一般来说,垃圾收集算法分为四类: 标记-清除算法 最基础的算法便是标记-清除算法(Mark-Sweep)。算法分为“标记”和“清除”两个阶段:首先标记处需要收集的对象,在标记完成之后,再统一回收所有被标记的对象。 这是最简单的一种算法,但是缺点也是很明显的:一个是效率问题,标记...
《深入理解Java虚拟机》(三)垃圾收集器与内存分配策略
垃圾收集器与内存分配策略 详解 3.1概述 本文参考的是周志明的 《深入理解Java虚拟机》第三章 ,为了整理思路,简单记录一下,方便后期查阅。 3.2对象已死吗 在垃圾收集器进行回收前,第一件事就是确定这些对象哪些还存活,哪些已经死去。 3.2.1引用计数算法 在对象中添加一个引用计数器,每当有一...
《深入理解Java虚拟机》读书笔记——垃圾收集器与内存分配策略
一、判断对象是否存活的算法: 引用计数算法。 给对象添加一个引用计数器,每一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不可能再被使用的。 优缺点:实现简单,效率高;但很难解决对象之间相互循环引用的问题。 可达性分析算法 通过一系列的称...
《深入理解Java虚拟机》第3章 垃圾收集器与内存分配策略
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。3.1 概述说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,1960年诞生于MIT的Lisp是第...
深入理解Java虚拟机学习笔记——二、垃圾收集器与内存分配策略
1、对象存活判定算法 引用计数算法 给对象添加一个引用计数器,当有其他对象引用它时,计数器加1;当引用失效时,计数器减1。任何时刻计数器为0的对象就是不可能在被使用的。引用计数算法实现简单,判定效率也很高,但是很难解决对象间相互循环引用的问题。 可达性分析算法 通过一系...
[置顶] 深入理解java虚拟机(五):hotspot垃圾收集算法实现
深入理解java虚拟机(一):java内存区域(内存结构划分)深入理解java虚拟机(二):java内存溢出实战 深入理解java虚拟机(三):String.intern()-字符串常量池深入理解java虚拟机(四):对象存活判定算法和垃圾收集算法深入理解java虚拟机(五):hotspot垃圾...
[置顶] 《深入理解java虚拟机》读书笔记——垃圾收集器
注:转载自:http://www.jianshu.com/p/50d5c88b272d 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般...
读 - 深入理解java虚拟机 - 笔记(六-4) - 垃圾收集器和内存分配策略(3章)-内存分配
Java所提倡的自动内存管理可以自动化解决两个问题: 1.给对象分配内存。 2.回收分配给对象的内存。 关于内存的回收,上一篇已经讲过了,这一篇讲一讲内存的分配。 1.对象优先在Eden分配。 大多数情况下,对象在新生代Eden中分配(关于Eden区,上一篇已经大致介绍了),当Eden区没有足够空间...
《深入理解 Java 虚拟机》- 笔记 - 垃圾收集算法
标记 - 清除算法 算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。不足: 标记和清除两个过程的效率都不高。 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后再程序运行过程中需要分配较大对象时,无法找到足够的连续内存而...
《深入理解Java虚拟机》个人读书总结——垃圾收集/回收算法
说起垃圾回收,我估计很多初级java开发(包括之前的我)想到的是这个JVM会帮我管理的啊,我们不太需要去考虑这种事情。但是,当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈的时候,我们就有必要对垃圾回收GC进行了解了。思考GC需要完成的3件事情: 1.哪些内存需要回...
5.《深入理解Java虚拟机》垃圾收集算法思想
前面一篇博文讲了怎么判断哪些对象是可以被收集的,确定了哪些对象可以被回收之后,自然需要研究的是如何对对象进行回收。下面主要介绍几种算法的思想以及其发展过程: 首先普及两个概念: 新生代:主要用来存放新生的对象。 老年代:主要用来存放应用程序中生命周期长的内存区域。 持久代:主...
深入理解jvm虚拟机读书笔记-垃圾收集器与内存分配策略(二)
垃圾收集算法-标记清除算法 标记清除算法是最基础的收集算法。算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记过程完成后统一回收所有被标记的对象。后续的收集算法都是基于这种思路对其不足进行改善。 主要有两个不足点: 一个是效率,标记和清除两个过程的效率都不高; 另一个是空间问...
读 - 深入理解java虚拟机 - 笔记(六-1) - 垃圾收集器和内存分配策略(3章)-对象已死吗
虚拟机这本书我还只能停留在翻译的边缘,没有能力去结合实际工作经验分享自己的体会,因为自身的编程工作仍然是业务驱动,并且也没有很大的并发量,这是致命的,自己根本碰不到需要深入了解虚拟机去解决问题的程度,也是很想去接触这种项目,但是高大上的公司又没有机会,只能是读书去了解知识了。 判断对象是否已死。主...
《深入理解java虚拟机》学习-第三章-垃圾收集器
1.GC需要完成的三件事情: ① 哪些内存需要回收? ② 什么时候回收? ③ 如何回收? 2.程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭,所以这几个区域不需要过多考虑回收问题,因为线程结束时,内存自然就跟着回收了,而java堆和方法去不同; 3.在堆里存放几乎java中所有对象实...
深入理解Java虚拟机笔记---垃圾收集算法
本文转自:http://blog.csdn.net/xtayfjpk/article/details/41819965 当对象判定为"已死"状态,虚拟就要采取一定的手段将这些对象从内存中移除,即回收垃圾,回收过程有采用一定的算法。如下是一些主要的垃圾收集算法: 1.标记-清除算法 该算法是最基...
深入理解Java虚拟机之垃圾收集一
“生存还是死亡” 如何来判定对象是否存活?针对这个问题书中给出了两种算法,分别是引用计数算法和可达性分析算法 引用计数算法 该算法的思路简单并且易于实现。我们给对象中添加一个引用计数器,当有一个地方引用它时,引用计数器就加一,当引用失效时,计数器减一,当计数器为0时就说明该对象不可能再被引用。...
第3章 垃圾收集器与内存分配策略--《深入理解 Java 虚拟机》笔记
垃圾回收器(Garbage Collection,GC)。三件事:哪些内存需要回收?什么时候回收?如何回收?程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。 堆中几乎存放着Java世界中所有对象实例,垃圾收集器在对堆...
《深入理解JAVA虚拟机》笔记4——垃圾收集与内存分配策略
为什么要去了解GC和内存分配? 当需要排查各种内存溢出、内存泄漏时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些自动化的技术实施必要的监控和调节。 程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭。如何判断对象存活状态 引用计数法 给对象中添加一个引用...
深入理解JVM虚拟机学习笔记(二)垃圾收集器与垃圾收集算法
在进行垃圾收集之前得先确定哪些对象是死的哪些对象是活的? 引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时计数器值减1,任何时刻,计数器都为0的对象就是不可能再去使用的。 但是Java语言没有使用引用计数法来管理内存,其中主要原因是很难解决对象之间...
深入理解java虚拟机(二)----垃圾收集策略与内存分配策略
程序计数器,虚拟机栈,本地方法栈的内存分配和回收具有确定性,每一个栈帧分配多少内存基本在类结构确定下来时就已知了。在这几个区域中也不需要过多的考虑回收的问题,因为方法结束或者线程结束时,内存也边便跟着回收了。而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多...