备战金三专题:强引用、软引用、弱引用、幻象引用有什么区别?

不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。

强引用:只要有强引用指向一个对象,就表明对象还活着,垃圾收集器就不会回收。

一个普通对象,如果没有其他引用关系,只要超过了引用作用域或显式的将强引用设为null,就会被垃圾回收。

软引用: 当jvm内存不足的时候才会回收软引用指向的对象。如果还有空闲内存,就会保留,实现了缓存的作用。

弱引用: 一定会被垃圾收集,它仅仅提供了一种访问在弱引用状态下对象的途经。

如果获取对象时还在就使用它,否则重新实例化。同样用来实现缓存。

虚引用(幻象引用):不能通过他来访问对象,提供了一种通过对象被finalize后做一些事的机制。利用幻象引用监控对象的创建与销毁。例如netty的对外内存的释放。

知识拓展

1、对象可达性状态流转分析

通过各自的引用访问对象就是各自的可达性。

所有引用 类型都是抽象类java.lang.ref.Reference的子类

幻象引用get方法获取一直返回null,其他引用如果对象还没销毁,可以通过get方法获取原有对象,所以可以通过访问到的对象来重新改变引用关系,从而人为的改变对象的可达性状态。

 

内存泄漏:

错误的保持了强引用,弱引用指向了这个强引用,那么就无法回到弱可达的状态了,就会产生内存泄露。

2、引用队列的使用

幻象引用 可利用引用队列 在finalize后执行后续处理逻辑。

Object counter = new Object();
ReferenceQueue refQueue = new ReferenceQueue<>();
PhantomReference<Object> p = new PhantomReference<>(counter, refQueue);
counter = null;
System.gc();
try {
    // Remove 是一个阻塞方法,可以指定 timeout,或者选择一直阻塞
    Reference<Object> ref = refQueue.remove(1000L);
    if (ref != null) {
        // do something
    }
} catch (InterruptedException e) {
    // Handle it
}

3、Reachability Fence 可达性屏障

如果对象本身并没有强引用,但它的部分属性还在使用,就需要一个方法通知JVM对象是在被使用的。

class Resource {
 private static ExternalResource[] externalResourceArray = ...
 int myIndex; Resource(...) {
     myIndex = ...
     externalResourceArray[myIndex] = ...;
     ...
 }
 protected void finalize() {
     externalResourceArray[myIndex] = null;
     ...
 }
 public void action() {
 try {
     // 需要被保护的代码  执行finalize就不会回收该对象
     int i = myIndex;
     Resource.update(externalResourceArray[i]);
 } finally {
     // 调用 reachbilityFence,明确保障对象 strongly reachable
     Reference.reachabilityFence(this);
 }
 }
 private static void update(ExternalResource ext) {
    ext.status = ...;
 }
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
金三数据字典是指中国金融四大行之一的中国建设银行所使用的数据字典。数据字典是一种记录数据元素和数据元素之间关系的工具,它用于定义数据的结构、意义和属性。 金三数据字典为中国建设银行的金融业务提供了详细的数据信息,包括各种账户类型、交易类型、产品信息等。通过数据字典,用户可以了解每个数据元素的名称、定义、类型、长度等详细信息,从而更好地理解金融业务中的数据含义和使用规则。 数据字典的使用对银行的运营和管理具有重要意义。首先,它可以提高数据的一致性和准确性,确保系统中各个模块之间的数据传递和处理的准确性。其次,通过数据字典,用户可以对数据进行更好地管理和维护,包括数据的增加、修改、删除和查询等操作。此外,数据字典还可以帮助开发人员更好地理解以往开发的系统和代码,提高开发效率和质量。 金三数据字典是建设银行的核心数据管理工具之一,它不仅对银行的内部管理具有重要意义,同时也对外部的合作伙伴和金融机构具有重要的参考价值。通过共享数据字典信息,不同的金融机构之间可以更好地进行数据交换和合作,提高金融业务的效率和准确性。 总之,金三数据字典是中国建设银行重要的数据管理工具,它为银行的运营和管理提供了数据的详细信息和规范,对提高数据质量和业务效率具有重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值