Java弱引用的一个疑问

mac2024-04-04  30

今天在学习Java四大引用的知识,看到弱引用的描述是只要垃圾回收机制一运行,弱应用就会被回收。于是编写了以下测试代码(使用JDK1.8):

@Test public void test1() throws Exception{ WeakReference<Integer> reference = new WeakReference<>(50); System.out.println(reference.get()); System.gc(); System.out.println(reference.get()); }

打印结果如下:

50 50

看到这个结果有些懵,难道第二个不应该是null吗?然后我将Integer改为了Object,测试代码如下:

@Test public void test2() throws Exception{ WeakReference<Object> reference = new WeakReference<>(new Object()); System.out.println(reference.get()); System.gc(); System.out.println(reference.get()); }

打印结果如下:

java.lang.Object@78e03bb5 null

就符合了弱引用的描述。

后来联想到Integer有一组-128–127的常量池,我将第一次的代码改为大于127的数字,例如999,gc一下就为null了。

最新回复(0)