可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Swee...
分类:
编程语言 时间:
2014-10-20 20:54:06
阅读次数:
157
一、引用计数(Reference Counting)算法 Internet Explorer 8以下的DOM和BOM使用COM组件所以是引用计数来为DOM对象处理内存,引用计数的含义是跟踪记录每个值被引用的次数。形象点说: 1)房子里有很多便签纸,这些纸就好比是内存。如下图: 2)使用内存...
分类:
编程语言 时间:
2014-10-14 10:40:09
阅读次数:
316
Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的...
分类:
编程语言 时间:
2014-10-09 16:21:48
阅读次数:
304
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个...
分类:
编程语言 时间:
2014-10-09 16:05:28
阅读次数:
313
先看一眼JVM虚拟机运行时的内存模型:
1.方法区 Perm(永久代、非堆)
2.虚拟机栈
3.本地方法栈 (Native方法)
4.堆
5.程序计数器
1 首先的问题是:jvm如何知道那些对象需要回收 ?
目前两种标识算法、三种回收算法、两种清除算法、三种收集器
引用计数法
每个对象上都有一个引用计数,对象每被引用一次,引...
分类:
其他好文 时间:
2014-09-07 21:13:05
阅读次数:
363
介绍了 Java 虚拟机中,如何判断一个对象是否存活,各种垃圾回收算法的原理,以及HotSpot中的各种垃圾回收器的特点。...
分类:
编程语言 时间:
2014-08-28 18:12:28
阅读次数:
289
(1)引用计数法
这是最经典和最古老的一种,它的工作原理是为每个对象配备一个计数器,只有这个对象被引用了,引用计数器就加1,当引用失效时,计数器减一,只要计数器为0,意味着不再被使用,于是该对象就可以被回收了。
优点:实现简单;
缺点:无法处理循环引用情况。即有应该被回收的垃圾对象A、B,他们互相引用,除此之外无其他引用,然而他们计数器值不是0,因此无法回收,从而造成内存泄漏。
(2...
分类:
编程语言 时间:
2014-08-02 18:31:14
阅读次数:
257
之前的两篇文章(java运行时数据区浅析、java垃圾收集器(GC)浅析)介绍了java运行时数据区以及GC垃圾回收算法的相关知识,大家可以先去看看这两篇文章。
本篇文章将重点关注新生代的垃圾回收。
大部分JVM都会采用所谓的分代收集方式去回收垃圾,什么是分代收集呢?
根据对象的存活周期的不同将内存划分为好几块。一般是把java堆分为新生代和老年代,这样就可以根据各个年代的特点采...
分类:
其他好文 时间:
2014-06-16 18:38:23
阅读次数:
265
目录理解垃圾回收平台的基本工作原理垃圾回收算法垃圾回收与调试使用终结操作来释放本地资源对托管资源使用终结操作是什么导致Finalize方法被调用终结操作揭秘Dispose模式:强制对象清理资源使用实现了Dispose模式的类型C#的using语句手动监视和控制对象的生存期对象复活代线程劫持大对象一、...
分类:
其他好文 时间:
2014-06-12 13:52:49
阅读次数:
546