垃圾回收

内存管理:
    内存分配和内存回收,都由JVM自动完成。

可达、可恢复、不可达:
    1. 以线程为起点(单线程则为Main线程),能够访问到的对象称为可达。
    2. 当对象没有任何变量引用时,此时,对象处于可恢复状态;GC在回收该对象之前,会调用该对象finalize()方法(默认什么都不做),这个方法中,若此对象被重新引用,对象又处于可达状态;反之,则进入不可达状态,被GC回收。

强引用:最常用的引用方式,处于可达状态时,绝不会被回收。
软引用:SoftReference类,处于可达状态时,当内存不足,会被GC回收。
弱引用:WeakReference类,处于可达状态时,无论内存充足与否,均会被GC回收。
虚引用:PhantomReference类,与引用队列(ReferenceQueue)一起使用:当GC回收后,该虚引用会被加入引用队列,以此可以追踪垃圾回收状态。


内存泄露:JVM会自动回收不可达对象,但对于程序不再会访问的可达对象,客观上造成内存泄露。

原文地址:https://www.cnblogs.com/forstudy/p/2673659.html