JVM管理的堆内存中,几乎存放了所有的对象实例,如果一个对象已经使用完毕(没有任何引用指向它),那么,该对象所占用的内存应该被回收利用,而这些工作就是JVM垃圾收集器的工作
垃圾收集器在对堆内存进行回收之前,第一件事情就是要确定哪些对象还“存活”,哪些已经“死去”,其内存将要被回收,下面就来讲——根搜索算法
在讲根搜索算法之前,因为一个对象在没有任何引用指向它的时候,其所占内存才具备回...
分类:
编程语言 时间:
2015-05-05 22:02:17
阅读次数:
130
一、关于Java垃圾回收的简介(1)Java 内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。(2)每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性.在这几个区域内不需要过多考虑回收的问题,...
分类:
编程语言 时间:
2015-04-16 17:36:04
阅读次数:
182
收集算法是内存回收的方法论,垃圾收集据是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现没有规定,不同的厂商、不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,一般都会提供参数供用户根据自己的所用特点和要求组合出各个年代所使用的收集器。直到现在还没有最好的收集器,更加设有万能的收集器,只是对具体应用选择最合适的收集器。...
分类:
其他好文 时间:
2015-03-19 10:19:13
阅读次数:
199
概述程序计数器,本地方法栈,虚拟机栈随线程而生,随线程而灭. Java堆和方法区则不一样,这部分内存分配和回收的都是动态的,垃圾收集器所关注的是这部分内存.判断对象是否是垃圾的算法JVM没有选用引用计数算法来管理内存,最主要的是引用计数很难解决对象之间相互循环引用的问题.JVM采用了可达性分析算法来判断对象是否能回收.用GC Roots对象作为起点,向下搜索,搜索走过的路劲称为引用链(referen...
分类:
编程语言 时间:
2015-03-19 10:15:47
阅读次数:
168
垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,介绍几种垃圾收集算法的思想及其发展过程....
分类:
编程语言 时间:
2015-03-18 16:05:16
阅读次数:
133
Parallel Scavenge收集器是JAVA虚拟机中垃圾收集器的一种。和ParNew收集器类似,是一个新生代收集器。使用复制算法的并行多线程收集器。
1、特点
Parallel Scavenge收集器的关注点与其他收集器不同, ParallelScavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值...
分类:
编程语言 时间:
2015-01-19 14:25:01
阅读次数:
312
一、垃圾回收用到的主要算法
1.引用计数法
算法思路:
给对象中添加一个引用计数器,每当有一个地方引用他时,计数器值就加1;当引用失效时,计数器值就减1;当计数器的值为0时就可以把该对象删除。
算法优点:
实现简单,判定效率高
算法缺点:
难以解决对象之间相互循环引用的问题。
2.标记清除法
算法思路:
算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标...
分类:
其他好文 时间:
2014-12-17 21:03:11
阅读次数:
161
主要讲述java虚拟机的内存体系结构 了解了JVM 的一些基础之后,我们来看看java虚拟机内存的体系结构,这个是理解JVM垃圾收集算法的前提,理解了内存结构我们才能够针对不同的部分根据我们的程序进行优化。前面已经说明了,java的堆和栈,但是只是局部的说了一下,没有在java内存体系中说明。 这一...
分类:
其他好文 时间:
2014-11-05 23:02:40
阅读次数:
221
1. 标记 - 清除算法? 标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想。标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象。 它的主要缺点:①....
分类:
编程语言 时间:
2014-10-27 21:26:50
阅读次数:
283