JVM管理的堆内存中,几乎存放了所有的对象实例,如果一个对象已经使用完毕(没有任何引用指向它),那么,该对象所占用的内存应该被回收利用,而这些工作就是JVM垃圾收集器的工作
垃圾收集器在对堆内存进行回收之前,第一件事情就是要确定哪些对象还“存活”,哪些已经“死去”,其内存将要被回收,下面就来讲——根搜索算法
在讲根搜索算法之前,因为一个对象在没有任何引用指向它的时候,其所占内存才具备回...
分类:
编程语言 时间:
2015-05-05 22:02:17
阅读次数:
130
垃圾收集器(GarbageCollector,GC)对Java程序员来说,基本上是透明的,但是一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应..
分类:
编程语言 时间:
2015-05-05 12:45:52
阅读次数:
123
引用计数算法:
Python使用的
给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。
缺点:很难解决对象之间的相互循环引用的问题。
互相引用着对方,导致它们的计数都不为0,于是引用计数算法无法通知GC收集器回收它们。
根搜索算法:
Java,C#,Lisp用的是这个。
通过一系...
分类:
编程语言 时间:
2015-05-04 22:11:09
阅读次数:
183
垃圾收集基础
Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。
拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别。在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间。当内存释放不够完全时,即存...
分类:
其他好文 时间:
2015-04-21 09:39:14
阅读次数:
172
消除过期的对象引用,可以让垃圾收集器更好的回收对象,从而避免不必要的内存泄露(memory leak)。在支持垃圾回收的语言中,内存泄露是很隐蔽的(称这类内存泄露为“无意识的对象保持”更为恰当)。如果一个对象引用被无意识地保留起来了,那个垃圾回收机制不仅不会处理这个对象,也不会处理被这个对象所引用的...
分类:
其他好文 时间:
2015-04-20 11:10:37
阅读次数:
118
G1 GC是Jdk7的新特性之一、Jdk7+版本都可以自主配置G1作为JVM GC选项;作为JVM GC算法的一次重大升级、DK7u后G1已相对稳定、且未来计划替代CMS、所以有必要深入了解下:不同于其他的分代回收算法、G1将堆空间划分成了互相独立的区块。每块区域既有可能属于O区、也有可能是Y区,且...
分类:
其他好文 时间:
2015-04-20 11:03:50
阅读次数:
262
ARC1、ARC机制2、ARC 判断准则ARC机制 ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化ARC 判断准则: 只要没有强指针,就会释放对象。 指针分2种: ...
分类:
移动开发 时间:
2015-04-19 10:05:46
阅读次数:
137
Java经过近20年的演变,已经发展出一套复杂、健壮和高性能的垃圾收集器。在不同的应用场合下使用不同的GC组合能让程序性能得到可观提高。我想这也是Java这么多年来一直处于不败之地的原因之一。以下讨论只限于Server模式下的HotSpot JVM。GC的类型Sun/Oracle的HotSpot JVM为我们提供了多种不同的GC,一种GC只专门负责新生代或老年代的内存回收工作,所以实际使用的时候需要...
分类:
编程语言 时间:
2015-04-18 06:29:24
阅读次数:
174
一、关于Java垃圾回收的简介(1)Java 内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。(2)每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性.在这几个区域内不需要过多考虑回收的问题,...
分类:
编程语言 时间:
2015-04-16 17:36:04
阅读次数:
182
原理JVM堆内存分为2块:PermanentSpace 和 Heap Space。Permanent 即持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, t...
分类:
其他好文 时间:
2015-04-14 14:28:30
阅读次数:
149