java 析构函数

析构函数(destructor)与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统会执行析构函数。在java中,我们一般用不到它,因为 java 有自动内存回收机制,无须程序员手动释放。java 对象析构时会调用 finalize() 方法。

在C++中,对象是可以在栈上分配的,也可以在堆上分配。在栈上分配的对象,也就是函数的局部变量,当超出块的”}”时,生命期便结束了。在堆上分配的对象,使用delete的时候,对象的生命期也就结束了。因此在C++中,对象的内存在哪个时刻被回收,是可以确定的(假设程序没有缺陷)。java秉承一切皆为对象的思想,对象仅能通过new来创建,因此java的对象是在堆上分配的内存。这些堆上的对象,如果没有作用了(无引用指向它),将等待垃圾回收器来回收其占用的内存。而垃圾回收期何时运行,无法提前预知,甚至有的时候直到程序退出都没有进行垃圾回收,程序所占内存直接由操作系统来回收。所以在java中,对象的内存在哪个时刻回收,取决于垃圾回收器何时运行。

参考资料

  • 百度百科 - 析构函数
  • java的finalize()方法与C++的析构函数

你可能感兴趣的:(java)