您的位置:首页 > 编程语言 > Java开发

Java垃圾回收机制知识点总结

2017-03-15 13:27 411 查看
Java垃圾回收机制知识点总结

1.Java垃圾回收机制是Java语言的重要功能之一。当程序创建对象,数组等引用类型对象时,系统会自动在内存区为之分配一块内存,对象就保存在这块内存区内,当这块内存不再被任何变量引用时,这块内存就成为了垃圾,等待垃圾回收机制进行回收。

2.Java 垃圾回收机制的特征:

(1)垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(例如数据库连接、网络连接、IO流等资源)。

(2)程序无法精准控制垃圾回收的运行,垃圾回收会合适的时候进行。当对象永久性地失去引用后,系统就会在合适的时候回收它所占得内存。

(3)在垃圾回收机制回收对象之前,总会先调用它的finalize()方法。
(4)将对象的引用赋值为null,也不能释放掉该对象所占的内存,赋值为null,只是说明该对象可以被回收了,但是具体什么时候回收是程序员无法控制的,有jvm决定的;

3.Java Object的finalize()方法:

     Java 允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。

注:使用该方法可能使将要回收的对象重新复活(让一个引用变量重新引用该变量),从而导致垃圾回收机制取消回收。
4.强制垃圾回收的两种方式:

(1)调用System类的gc()静态方法:System.gc()。

(2)调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc()。

注:1)仅仅是通知系统进行垃圾回收,但系统是否进行垃圾回收依然不确定。大部分时候,程序强制系统垃圾回收后总会有一些效果。

     2)在《java虚拟机》一书中明确讲了,释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。

5.对象的四种引用方式:
(1)强引用(StrongReference)    一个对象被一个或一个以上的引用变量所引用。
(2)软引用(SoftReference)       内存不足时可能会被回收
(3)弱引用(WeakReference)      不管内存是否足够,总会回收该对象所占用的内存
(4)虚引用(PhantomReference)  完全类似于没有引用,虚引用不能单独使用,虚引用必须和引用队列联合使用,主要用于跟踪对象被垃圾回收的状态。
6.Java回收机制的优缺点:
优点:
(1)可以很好的提高编程效率,在一个没有垃圾收集机制的语言下编程,程序员还要花时间来解决难以捉摸的内存问题;
(2)保护程序的完整性,因为程序员不可能因为失误错误地释放内存而导致jvm崩溃;
缺点:
(1)Java回收机制的开销影响程序的运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 垃圾回收