如果有人问你Java垃圾回收机制你这么答就好了!

原创 2015年11月17日 20:19:26
1、为什么要进行垃圾回收:
       在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象 的内存时,该内存便成为垃圾。 垃圾回收能自动释放内存空间,减轻编程的负担,JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对 象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片。由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。
2、如何进行垃圾回收:
          Java语言规范没有明确地说明JVM使用哪种垃圾回收算法,但是任何一种垃圾回收算法一般要做2件基本的事情:(1)发现无用信息对象;(2)回收被无用对象占用的内存空间,使该空间可被程序再次使用。
   大多数垃圾回收算法使用了根集(root set)这个概念;所谓根集就是正在执行的Java程序可以访问的引用变量的集合(包括局部变量、参数、类变量),程序可以使用引用变量访问对象的属性和 调用对象的方法。垃圾回收首先需要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们不能作为垃圾被回收,这也包括从根集间 接可达的对象。
3、对于特殊区域的垃圾回收(比如调用cc语言中的malloc()函数进行空间的分配那么垃圾回收机制就不能回收这类特殊空间): 之所以要使用finalize(),是存在着垃圾回收器不能处理的特殊情况。假定你的对象(并非使用new方法)获得了一块“特殊”的内存区域,由于垃圾 回收器只知道那些显示地经由new分配的内存空间,所以它不知道该如何释放这块“特殊”的内存区域,那么这个时候java允许在类中定义一个由 finalize()方法
4、触发GC(Garbage Collector)的条件:

 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC:

  1)当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。


  2)Java堆内存不足时,GC会被调用。 当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足 内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。
5、减少GC开销的措施:
  1. 不要显示的调用System.gc()
  2. 尽量减少临时对象的使用
  3. 对象不用的时候最好显示置空
  4. 尽量使用StringBuffer,不实用String累加字符串(String的特性有关)
  5. 能使用基本数据类型就不要使用封装类
  6. 尽量减少静态对象变量的使用
6、注意:
  1. GC的回收时间是不确定的,即使你显示的调用的System.gc()。因为和线程优先级有关
  2. 使用了finalize()方法之后,GC是在这个方法执行之后的下一次进行垃圾的回收。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

简单理解了下java中的垃圾回收机制

准备找工作,所以各种看书了,对于java开发岗来说垃圾回收机制的份量很重的说。看了以下几本书中对垃圾回收机制的描述:《深入理解java虚拟机》、《java编程思想》、《疯狂Java讲义》、《Java程...
  • NIMANCY
  • NIMANCY
  • 2016年07月14日 17:12
  • 579

Java垃圾回收机制理解

垃圾回收机制的理解。

【2】机器学习之兄弟连:K近邻和K-means

利用Java实现的K-means聚类:k-means cluster 关键词:从K近邻到最近邻,监督学习,数据带lable,效率优化(从线性搜索到kd树搜索),缺点是需要存储所有数据,空间复杂度大。可...

腾讯2016面经(基础研究春招实习)

十分侥幸的我通过了腾讯基础研究的笔试,4.14在哈尔滨的一面总结一下吧,反正是过了,正在等二面消息。 面试小哥人很好~很有耐心,我能看出他已经很累了(下午5:30面的),依旧坚挺,表扬鹅厂! 1)自...

java垃圾回收机制

  • 2016年06月19日 07:57
  • 14KB
  • 下载

Java垃圾回收机制详解

  • 2011年11月19日 14:33
  • 199KB
  • 下载

如何监控Java垃圾回收机制

本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,...

Java垃圾回收机制

  • 2013年06月17日 01:07
  • 63KB
  • 下载

Java垃圾回收机制的学习和使用

  • 2011年07月27日 10:54
  • 26KB
  • 下载

Java垃圾回收机制【经典总结】

Java垃圾回收机制 原文地址:http://blog.csdn.net/zsuguangh/article/details/6429592   作者:zsuguangh        其他相关: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如果有人问你Java垃圾回收机制你这么答就好了!
举报原因:
原因补充:

(最多只允许输入30个字)