【Java.lang.ref】ref包简述

目录

  • java.lang.ref包相关的API文档
  • ref包的内容
    • 相关线程
  • ref包的规范
    • ref包支持应用与GC进行有限交互
    • ref包中的引用类型
    • ref包核心逻辑
  • 可达性
    • 强可达
    • 软可达
    • 弱可达
    • 虚可达
    • 不可达
  • 总结

 


零、API documentation

java.lang.ref API documentation: https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/ref/package-summary.html

Provides reference-object classes, which support a limited degree of interaction with the garbage collector. 

other consideration: https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html

1.Some applications interact with garbage collection by using finalization and weak, soft, or phantom references.

2.Another way that applications can interact with garbage collection is by invoking full garbage collections explicitly by calling System.gc()

总结

从两个文档中可以得出这样的结论:

  • 至少有两种方式支持应用与JVM GC进行交互:
    • java.lang.ref包中的引用:有限交互
      • 场景:在应用中使用不同的Java引用类型,当GC发生的时候会触发不同的资源回收操作
        • Java堆内存资源:SoftReference & WeakReference
        • 其他资源:PhantomReference & jdk.internal.ref.Cleaner
        • 兜底机制:FinalReference & Finalizer
        • Java9提供的资源回收机制:java.lang.ref.Cleaner
    • System.gc:通常是一次full gc,配置一些jvm参数,CMS会优化成一次background GC,G1会优化成一次轻量级的并发收集(见下面补充)
      • 场景:在应用中手动控制GC的发生

补充:Explicit Garbage Collection(显式GC)

在第二个api documentation中还提及了显式GC的问题——System.gc

Another way that applications can interact with garbage collection is by invoking full garbage collections explicitly by calling System.gc()

除了java.lang.ref包中的引用类,通过System.gc也能够和垃圾收集进行交互,而且System.gc默认是full gc(full garbage collections)。你可以通过-XX:+DisableExplicitGC来禁用System.gc(默认不禁用),同时,如果你配置了-XX:+ExplicitGCInvokesConcurrent,那么在CMS和G1垃圾收集器下,就不再是默认的full gc,CMS下会做一次background的并发GC,G1下会做一次轻量级的并发收集try_collect_concurrently。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值