Java 内存模型 Java 中垃圾回收有什么目的?什么时候进行垃圾回收?
垃圾回收是在内存中存在没有引用的对象或超过作用域的对象时进行的。 垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。
如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
不会,在下一个垃圾回调周期中,这个对象将是被可回收的。 也就是说并不会立即被垃圾收集器立刻回收,而是在下一次垃圾回收时才会释放 其占用的内存。
finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
(1)垃圾回收器(garbage colector)决定回收某对象时,就会运行该对象的 finalize()方法; finalize 是 Object 类的一个方法,该方法在 Object 类中的声明 protected void finalize() throws Throwable { } 在垃圾回收器执行时会调用被回收对象的 finalize()方法,可以覆盖此方法来实 现对其资源的回收。
注意:一旦垃圾回收器准备释放对象占用的内存,将首先调 用该对象的 finalize()方法,并且下一次垃圾回收动作发生时,才真正回收对象 占用的内存空间
(2)GC 本来就是内存回收了,应用还需要在 finalization 做什么呢? 答案是大 部分时候,什么都不用做(也就是不需要重载)。只有在某些很特殊的情况下,比 如你调用了一些 native 的方法(一般是 C 写的),可以要在 finaliztion 里去调 用 C 的释放函数。