文章目录
在 C 和 C++ 中,许多对象要求程序员声明他们后为其分配资源,然后才能安全地使用对象。使用完后,则需要程序员将这些资源释放到自由内存池。如果资源得不到释放,则认为代码泄露内存。然而,如果过早地释放,又可能发生数据丢失、Null指针等问题。
Java 和 C# 都有单独的管理应用程序管理对象的生存期并进行垃圾回收 (Garbage Collection - GC
) ,这样程序员可以不再关心内存释放问题,保证系统的性能和稳定性。
这里记录 Java 垃圾回收相关知识点,后面会再记录 C# 垃圾回收。
部分借鉴网络一些总结文章
1 Java 垃圾回收
Java 中,JVM
通过跟踪已经分配资源的引用来释放不再使用的堆存。只要 JVM
检测到对象不再被引用,垃圾回收器就会在适当的时候回收对象。
1.1 JVM
下载 Java 的时候,我们会得到 JRE (Java Runtime Environment)
,JRE 中包括了 JVM (Java Virtual Machine)
和 类库 (Java platform core classes
, Java platform libraries
)。
Java 语言的一个重要特点就是与平台无关,即得益于 JVM
的引入,Java在不同平台上运行时不需要重新编译,秩序生成在 JVM
上运行的目标代码,就可以多平台运行。
JVM
定义了程序执行期间是用的数据区域,如程序计数器、堆、栈、方法区、运行时常量池等。这些数据区域中的一些在JVM启动时创建,JVM退出时销毁。
1.2 Java 对象生命周期
Java 中,对象的生命周期包括:
public class ObjectLifecycle {
public static void main(String[] args) {
ObjectLifecycle obj = new ObjectLifecycle(); // 创建阶段
// 使用阶段
obj = null