传统语言中,一个不再使用的对象需要手动释放,否则会出现内存泄漏,而内存泄露的积累可能导致内存溢出。
Java 为了简化对象的释放,引入了自动垃圾回收机制,通过垃圾回收器来对不再使用的对象完成自动的回收。垃圾回收器主要负责对堆上的内存进行回收。其他很多现代语言如 C#、Python、Go 等都有自己的垃圾回收器。
C#
Python
Go
垃圾回收大多数情况下都是发生在堆空间上的。
像线程不共享的区域(例如栈),都是随着线程的创建而创建,线程的销毁而销毁。方法的栈帧在执行完方法后会自动弹出。