博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java:对象的引用类型:强引用、软引用、弱引用、和虚引用
阅读量:2066 次
发布时间:2019-04-29

本文共 715 字,大约阅读时间需要 2 分钟。

对象的引用类型分为:强引用、软引用、弱引用、和虚引用

强引用:

一般声明对象是虚拟机生成的引用.

强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用;即如果被强引用,则不会被垃圾回收,垃圾回收器情愿跑出内存溢出异常。

软引用

软引用一般被做为缓存来使用。

与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间;如果剩余内存相对富裕,则不会进行回收。
换句话说,虚拟机在发生OutOfMemory(内存溢出)时,肯定是没有软引用存在的

弱引用

弱引用与软引用类似,都是作为缓存来使用。

但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内

虚引用

虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法获取到的数据永远为null,因此也被成为幽灵引用。

虚引用主要用于检测对象是否已经从内存中删除。
垃圾回收时回收,无法通过引用取到对象值

总结

引用类型 被回收时间 用途 生存时间
强引用 从来不会 对象的一般状态 JVM停止运行
软引用 内存不足时对象缓存内存(溢出)不足时
弱引用 JVM垃圾回收时 对象缓存 GC运行后
虚引用 JVM垃圾回收时 跟踪对象的垃圾回收 垃圾回收后终止

强引用不用说,我们系统一般在使用时都是用的强引用。

而“软引用”和“弱引用”比较少见。他们一般被作为缓存使用,而且一般是在内存大小比较受限的情况下做为缓存。
因为如果内存足够大的话,可以直接使用强引用作为缓存即可,同时可控性更高。
因而,他们常见的是被使用在桌面应用系统的缓存。

转载地址:http://xzumf.baihongyu.com/

你可能感兴趣的文章
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
计算机底层是什么东西?
查看>>
关于PHP几点建议
查看>>
硬盘的接口、协议
查看>>
安装系统之一 U盘启动盘制作
查看>>
安装系统之二 U盘启动盘制作---UEFI版
查看>>
安装系统之四 U盘装GHOST XP教程
查看>>
安装系统之五 U盘装原版XP教程
查看>>
安装系统之六 U盘装GHOST WIN7教程
查看>>
安装系统之八 U盘装GHOST WIN8教程
查看>>
安装系统之九 U盘装原版WIN8教程
查看>>
安装系统之三 U盘启动盘建立磁盘分区教程
查看>>
系统安装之十 U盘安装原版win10
查看>>
安装系统之十一 UEFI和Legacy及UEFI+Legacy启动的区别
查看>>