Java的垃圾回收机制研究[Java编程]
本文“Java的垃圾回收机制研究[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、谁在做Garbage Collection?
一种风行的说法:在C++里,是系统在做垃圾回收;而在Java里,是Java自身在做.
在C++里,释放内存是手动处理的,要用delete运算符来释放分配的内存.这是风行的说法.切当地说,是利用认为不需求某实体时,就需用delete奉告系统,可以回收这块空间了.这个要求,对编码者来说,是件很麻烦、很难做到的事.随便上哪个BBS,在C/C++版块里老是有一大堆关于内存泄露的话题.
Java采取一种差别的,很便利的办法:Garbage Collection.垃圾回收机制放在JVM里.JVM完好负责垃圾回收事宜,利用只在需求时申请空间,而在丢弃对象时没必要关心空间回收问题.
2、对象在啥时被丢弃?
在C++里,当对象脱离其作用域时,该对象即被利用丢弃.
是对象的生命期不再与其作用域有关,而仅仅与引用有关.
Java的垃圾回收机制普通包含近十种算法.对这些算法中的大都,我们没必要予以关心.只有此中最简单的一个:引用计数法,与编码有关.
一个对象,可以有一个或多个引用变量指向它.当一个对象不再有任何一个引用变量指向它时,这个对象就被利用丢弃了.大概说,这个对象可以被垃圾回收机制回收了.
这就是说,当不存在对某对象的任何引用时,就意味着,利用奉告JVM:我不要这个对象,你可以回收了.
JVM的垃圾回收机制对堆空间做及时检测.当发现某对象的引用计数为0时,就将该对象列入待回收列表中.但是,并非即刻予以销毁.
3、丢弃就被回收?
该对象被认定为没有存在的必要了,那么它所占用的内存便可以被释放.被回收的内存可以用于后续的再分配.
但是,并非对象被丢弃后当即被回收的.JVM进程做空间回收有较大的系统开销.假如每当某利用进程丢弃一个对象,就当即回收它的空间,必将会使整个系统的运转效率非常低下.
前面说过,JVM的垃圾回收机制有多个算法.除了引用计数法是用来判断对象能否已被丢弃外,别的算法是用来肯定什么时刻及若何做回收.JVM的垃圾回收机制要在时间和空间之间做个均衡.
因此,为了提高系统效率,垃圾回收器普通只在满意两个条件时才运行:即有对象要回收且系统需求回收.牢记垃圾回收要占用时间,因此,Java运行时系统只在需求的时刻才利用它.因此你无法知道垃圾回收发生的切确时间.
4、没有引用变量指向的对象有效吗?
前面说了,没挂上引用变量的对象是被利用丢弃的,这意味着,它在堆空间里是个垃圾,随时大概被JVM回收.
不过,这里有个不是例外的例外.关于一次性利用的对象(有些书称之为暂时对象),可以不用引用变量指向它.举个最简单也最常见的例子:
System.out.println(“I am Java!”);
就是成立了一个字符串对象后,直接传送给println()办法.
以上是“Java的垃圾回收机制研究[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:Servlet简介
- ·下一篇文章:JDBC日期处理用法详解
- ·中查找“Java的垃圾回收机制研究”更多相关内容
- ·中查找“Java的垃圾回收机制研究”更多相关内容