Java四种引用方式分析

今天没什么心情,随便做下笔记吧,后面慢慢添加.

package code_test;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;

/**
 * 4种引用方式示例
 *
 */

public class Quote {

	public static void main(String[] args) {
		// 1.强引用,java由new产生的对象都属于强引用,只要某个对象有与之相关的引用,jvm比对不会回收该对象,即使内存不足,也只会抛出OOM,不会回收
		String st = new String("as");

		System.gc();// 由于内存足够,所以GC之后,对象仍然存在

		System.out.println(st);

		// 软引用,当JVM进行回收时,如果内存不足就会进行回收,如果内存充足,不会回收

		// 弱引用,当JVM进行内存回收时,无论内存是否充足,都会回收被弱引用关联的对象
		User user = new User();
		user.name = "lilin";
		WeakReference<User> list = new WeakReference<User>(user);
		System.gc();
		System.out.println(list.get());

		// 虚引用,虚引用需要合引用对联关联使用,虚引用在任何时候都可能被JVM回收.
		ReferenceQueue<String> queue = new ReferenceQueue<String>();
		PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
		System.out.println(pr.get());

	}

}

4种引用方式,在开发中可以适当的规避部分内存泄露问题,以免某些对象无法被GC回收,面试经常会问到。

猜你喜欢

转载自blog.csdn.net/weixin_42607020/article/details/81461346