强软弱虚引用 看这个你就懂啦!

依赖关系

强软弱虚引用 看这个你就懂啦!_第1张图片

强引用

强软弱虚引用 看这个你就懂啦!_第2张图片
看案例
强软弱虚引用 看这个你就懂啦!_第3张图片
引用为空 强制回收 不起作用

软引用

强软弱虚引用 看这个你就懂啦!_第4张图片
强软弱虚引用 看这个你就懂啦!_第5张图片
没有回收 内存充足 我们只能强制gc 情理之中的事情

但如果内存不足呢?

虚拟机限定5m大小运行

 -Xms5m -Xmx5m -XX:+PrintGCDetails

2020版如果找不到的话
强软弱虚引用 看这个你就懂啦!_第6张图片
测试
强软弱虚引用 看这个你就懂啦!_第7张图片

完美 在内存不足时被回收了

弱引用

强软弱虚引用 看这个你就懂啦!_第8张图片
强软弱虚引用 看这个你就懂啦!_第9张图片

软弱引用的案例

强软弱虚引用 看这个你就懂啦!_第10张图片

WeakHashMap的使用

强软弱虚引用 看这个你就懂啦!_第11张图片
强软弱虚引用 看这个你就懂啦!_第12张图片
看jdk文档的说明
在这里插入图片描述当他的键不再被使用时 将会自动移除整个entry对象

说虚引用前要先说下引用队列 因为虚引用必须搭配引用队列

引用队列

在对象回收前先保存在引用队列中  说人话  一个存放对象的活人棺材

使用弱引用来举例
强软弱虚引用 看这个你就懂啦!_第13张图片
可以看到 第一次队列没有元素 但gc后队列有了一个引用对象

虚引用

与上面用法类似 只是做一个系统通知的作用
强软弱虚引用 看这个你就懂啦!_第14张图片

总结

再触发垃圾回收机制的前提下

强引用 死都不回收 oom异常 宇宙毁灭也不回收
软引用 有内存就留着 没内存就回收 -----我有钱就收留你 没钱就滚蛋
弱引用 不管如何都会被回收
虚引用 同上 但必须配合引用队列 只要起一个死亡前通知的作用
引用队列 活人棺材

你可能感兴趣的:(java基础)