jvm

tech2022-12-07  98

1.   弱引用、 强引用、软引用、、虚引用的区别?

 

1.1强引用

我们平时new了一个对象就是强引用,例如 Object obj = new Object();即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象

 

1.2软引用

如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。

用处: 软引用在实际中有重要的应用,例如浏览器的后退按钮。按后退时,这个后退时显示的网页内容是重新进行请求还是从缓存中取出呢?这就要看具体的实现策略了。

如果一个网页在浏览结束时就进行内容的回收,则按后退查看前面浏览过的页面时,需要重新构建

如果将浏览过的网页存储到内存中会造成内存的大量浪费,甚至会造成内存溢出

代码:

Browser prev = new Browser();               // 获取页面进行浏览 SoftReference sr = new SoftReference(prev); // 浏览完毕后置为软引用         if(sr.get()!=null){      rev = (Browser) sr.get();           // 还没有被回收器回收,直接获取 }else{     prev = new Browser();               // 由于内存吃紧,所以对软引用的对象回收了     sr = new SoftReference(prev);       // 重新构建 }

1.3虚引用

如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。虚引用主要用来跟踪对象被垃圾回收器回收的活动。

 

 

1.4弱引用

具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

String str=new String("abc");

WeakReference<String> s= new WeakReference<String>(str);

str=null;等价于

str = null;

System.gc()

目录

1.   弱引用、 强引用、软引用、、虚引用的区别?

1.1强引用

1.2软引用

1.3虚引用

1.4弱引用


最新回复(0)