java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象。
1、 强引用(Strong Reference)
- 写法:
Object obj=new Object()
- 引用强度:最强
- 只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
2、 软引用(Soft Reference)
- 写法:
SoftReference<String> sr = new SoftReference<String>(new String("hello"));
- 有用但并不是必需的对象。
- 引用强度:第二
- 当内存不足的时候JVM才会回收该对象。
- 适用:实现缓存:比如网页缓存、图片缓存等。
3.弱引用(WeakReference)
- 写法:
WeakReference<String> wr = new WeakReference<String>(new String("hello"));;
- 非必需对象。
- 引用强度:第三
- 当JVM进行垃圾回收无论内存是否充足,都会回收其对象。
4.虚引用(PhantomReference)
- 写法:
ReferenceQueue<String> queue = new ReferenceQueue<String>(); PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue); ;
- 引用强度:最弱
- 任何时候都可能被垃圾回收器回收。
- 注意的是,虚引用必须和引用队列关联使用。
注意:在使用软引用和弱引用的时候,我们可以显示地通过System.gc()来通知JVM进行垃圾回收,但是要注意的是,虽然发出了通知,JVM不一定会立刻执行,也就是说这句是无法确保此时JVM一定会进行垃圾回收的。
参考:https://blog.youkuaiyun.com/sunxianghuang/article/details/52267282