Java 垃圾收集总结】的更多相关文章

source URL: http://www.infoq.com/articles/Java_Garbage_Collection_Distilled Name: Java Garbage Collection Distilled Author: Martin Thompson PostDate: 2013-06-17   翻译前言 作者还出了本关于Java性能tuning的书. 翻译这篇文章的目的是缓解上次在支付宝面试时仅回答出堆中有Young和Perm代这样的尴尬. 为自己的人生信条代言:W…
垃圾收集(Garbage Collection ,GC),是一个长久以来就被思考的问题,当考虑GC的时候,我们必须思考3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 那么在Java中,我们要怎么来考虑GC呢?首先回想以下内存区域的划分,其中程序计数器.本地方法栈.虚拟机栈三个区域随线程而生,随线程释放,栈中的栈帧随着方法的进入和退出执行着出栈和入栈的操作,每一个栈帧分配多少内存基本是在类结构确定时就已经固定的(可能会进行一些优化,但是大体上已知),因此这几个区域就不需要考虑回收的问题…
如果Java虚拟机中标记清除算法.标记整理算法.复制算法.分代算法这些属于GC收集算法中的方法论,那么"GC收集器"则是这些方法论的具体实现. 在面试过程中这个深度的问题涉及的比较少,但对于理解上面的这些算法有很好的帮助.如果能够如数家珍,也是面试中的加分项,还是那句话,毕竟面试官的时间也不多了. 概念准备 在学习Java GC收集器之前,需要先了解一些内容和概念,首先如果没有学习<面试官,不要再问我"Java GC垃圾回收机制"了>的可先学习该篇文章,…
Java垃圾收集算法 由于垃圾收集算法的实现涉及大量的程序细节,而且每个平台的虚拟机操作内存的方法又各不相同,因此博客中不过多的讨论算法的实现,只是介绍几种算法的思想以及发展. 相关阅读: 1.深入理解java虚拟机之java内存区域 2.深入理解java虚拟机之对象真的死了吗 1.标记-清除算法 标记清除算法分为“标记”和“清除”两个阶段,首先先标记出那些对象需要被回收,在标记完成后会对这些被标记了的对象进行回收:如下图: 这种算法的优点在于不需要对对象进行移动操作,仅对不存活的对象进行操作,…
如果Java虚拟机中标记清除算法.标记整理算法.复制算法.分代算法这些属于GC收集算法中的方法论,那么"GC收集器"则是这些方法论的具体实现. 在 面试过程中这个深度的问题涉及的比较少,但对于理解上面的这些算法有很好的帮助.如果能够如数家珍,也是面试中的加分项,还是那句话,毕竟面试官的时间也不多了. 概念准备 在学习Java GC收集器之前,需要先了解一些内容和概念,首先如果没有学习<面试官,不要再问我"Java GC垃圾回收机制"了>的可先学习该篇文章…
1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用. 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配.垃圾收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能,…
对象引用 Java 中的垃圾回收一般是在 Java 堆中进行,因为堆中几乎存放了 Java 中所有的对象实例.谈到 Java 堆中的垃圾回收,自然要谈到引用.在 JDK1.2 之前,Java 中的引用定义很很纯粹:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用.但在 JDK1.2 之后,Java 对引用的概念进行了扩充,将其分为强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Refe…
(1)除了释放不再被引用的对象,垃圾收集器还要处理 堆碎块 .请求分配新对象时可能不得不增大堆空间的大小,虽然可以使用的空闲空间是足够的,但是堆中没有没有连续的空间放得下新对象.可能会导致虚拟机产生不必要的”内存不足“错误. (2)使用垃圾收集堆,有一个潜在的缺陷就是加大程序的负担, 可能影响程序的性能 .因为虚拟机需要追踪哪些对象被正在执行的程序引用,还要动态释放垃圾对象. (3)程序可以调用System.gc()建议jvm去收集垃圾, 但是不能为垃圾回收机制指定某个对象是不是垃圾.即便调用了…
通常,我们把分配出去后,却无法回收的内存空间称为"内存渗漏体(Memory Leaks)". 以上这种程序设计的潜在危险 性在Java这样以严谨.安全著称的语言中是不允许的.但是Java语言既不能限制程序员编写程序的自由性,又不能把声明对象的部分去除(否则就不是面向 对象的程序语言了),那么最好的解决办法就是从Java程序语言本身的特性入手.于是,Java技术提供了一个系统级的线程(Thread),即垃圾收集 器线程(Garbage Collection Thread),来跟踪每一块分…
简介       Garbage-First(G1)垃圾收集器全面支持JDK7 Upate 4及后续版本.G1收集器是一个服务器形式(server-style)的垃圾收集器,主要用于内存大.多处理器的机器.当您想实现:与应用程序线程并发的执行全局标记,并且有高吞吐量.面向整个堆操作时,它可以满足您高可用性及GC暂停时间的要求. 此举可有效防止中断(GC时的暂停时间)与堆或者实时数据大小成比例增涨. 技术 G1收集器通过如下技术来实现高性能和低暂停时间: 堆被划分成一组相同大小的堆区域(heap…