Java的垃圾收集机制
1、在Java中,垃圾收集就是用来描述自动内存管理的术语。内存是用来创建栈、堆、Java常量池以及方法的区域。堆是Java对象所在的内存部分,所以它是垃圾收集过程所涉及的唯一一块内存区域。
2、垃圾收集的核心任务(目的):查找并删除Java程序运行时不可到达的任何对象,或者说用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
3、垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身。
4、何时运行垃圾收集器? 一切由JVM决定,Java程序可以(比如使用System.gc() 或Runtime.getRuntime().gc())请求JVM运行垃圾收集器,但无法保证JVM能及时响应程序的请求。
5、什么样的对象符合垃圾收集的条件? 当没有线程能够访问对象时(针对非String对象)。通俗点来说,就是当一个对象不被任何处于活线程中的引用变量引用时,该对象即符合删除的条件。
6、如何显式地是对象符合垃圾收集的条件(假设对象只被一个引用变量引用)?
1)空引用,即将对象的引用变量设置为null。
2)将对象的引用指向其他对象。
3)隔离引用(原来如下图所示)。
7、垃圾收集前执行清理-finalize()方法
1)不过不要指望垃圾收集器删除一个对象(看JVM的心情。。。)。因此,放入finalize()的任何代码都无法保证会运行。
2)对于任意给定对象,finalize()方法(最多)只会被垃圾收集器执行一次。
3)一般情况下,不建议重写finalize()方法(并在其中实现任何功能逻辑)。
上一篇: Servlet执行流程及原理解析