/**
* Date: 2021/5/21 14:52
* 内存够用的情况下,不会被GC,但是当内存不够用时,会被GC
*/
public class SoftReferenceDemo {
public static void softRef_Memory_Enough() {
Object o1 = new Object();
SoftReference<Object> softReference = new SoftReference<>(o1);
System.out.println(o1);
System.out.println(softReference.get());
o1 = null;
System.gc();
System.out.println(o1);
System.out.println(softReference.get());
}
/**
* JVM配置,故意产生大对象并配置小的内存,让它内存不够用了导致OOM,看软引用的回收情况
* -Xms5m -Xmx5m -XX:PrintGCDetails
*/
public static void softRef_Memory_NotEnough() {
Object o1 = new Object();
SoftReference<Object> softReference = new SoftReference<>(o1);
System.out.println(o1);
System.out.println(softReference.get());
o1 = null;
// 这里JVM自动GC,内存不够
try {
byte[] bytes = new byte[30 * 1024 * 1024];
}catch (Throwable e) {
e.printStackTrace();
}finally {
System.out.println(o1);
System.out.println(softReference.get());
}
}
public static void main(String[] args) {
// softRef_Memory_Enough();
softRef_Memory_NotEnough();
}
}
软引用 SoftReference
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- https://www.jianshu.com/p/8c634f10ed1a软引用是用来表示某个引用会被GC(垃圾...
- 软引用简介 软引用是用来表示某个引用会被GC(垃圾处理器)收集的类。当有引用指向某个obj的时候,通常发生GC的时...
- 我的app很头疼,有时候很容易记混淆,搞不懂哪个是内存不足才会回收,哪个随时可能被回收 哪个调用gc之后一定会回收...