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回收,面试经常会问到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值