内存管理:
内存分配和内存回收,都由JVM自动完成。
可达、可恢复、不可达:
1. 以线程为起点(单线程则为Main线程),能够访问到的对象称为可达。
2. 当对象没有任何变量引用时,此时,对象处于可恢复状态;GC在回收该对象之前,会调用该对象finalize()方法(默认什么都不做),这个方法中,若此对象被重新引用,对象又处于可达状态;反之,则进入不可达状态,被GC回收。
强引用:最常用的引用方式,处于可达状态时,绝不会被回收。
软引用:SoftReference类,处于可达状态时,当内存不足,会被GC回收。
弱引用:WeakReference类,处于可达状态时,无论内存充足与否,均会被GC回收。
虚引用:PhantomReference类,与引用队列(ReferenceQueue)一起使用:当GC回收后,该虚引用会被加入引用队列,以此可以追踪垃圾回收状态。
内存泄露:JVM会自动回收不可达对象,但对于程序不再会访问的可达对象,客观上造成内存泄露。