zoukankan      html  css  js  c++  java
  • 你不可不知的Java引用类型【总结篇】

    四种引用类型总结

    引用级别:强引用 > 软引用 > 弱引用 > 虚引用

    理解

    就如最开始说的,设置四种引用类型,是为了更好的控制对象的生命周期,让代码能够一定程度上干涉GC过程,所以引用类型主要就是跟垃圾回收有关了。

    对于JVM、GC和内存,可以这样理解,内存好比你的抽屉,这个抽屉有一定大小,并不能无限存放东西。

    JVM好比你自己,会时不时来整理抽屉。那些申请的对象好比放在抽屉里的东西,生活中的必需品就好比强引用,而那些可能用到的东西(非必需品)就好比软引用或者弱引用。

    当抽屉还很空的时候,放一些非必须品你也不会在意,但是随着买的东西越来越多,抽屉里快放不下的时候,就需要根据重要程度来选择一些东西扔出抽屉,这个过程就好比GC。

    JVM在内存够用的时候,不会对软引用的对象进行回收,但是当内存紧张的时候,就会对它们进行清理。

    四种引用类型对比

    引用类型 引用对象被垃圾回收的时间 用途 是否可以转为强引用 对应的类
    强引用 从来不会 一般用途,保持对象不被回收 可以 默认
    软引用 发生一次GC后,JVM决定还需要进一步回收更多空间时 缓存,保持对象在内存足够时不被回收 可以 SoftReference
    弱引用 进行垃圾回收时,如果对象只存在弱引用 缓存,仅仅在对象仍被使用时保持其不被回收 可以 WeakReference
    WeakHashMap
    虚引用 进行垃圾回收时 跟踪GC过程,在对象被回收前进行一些清理工作 不可以 PhantomReference

    题外话

    emmmm….总觉得少了点什么,有没有想过,为什么没有StrongReference类?

    嗯,讲道理,软引用,弱引用,虚引用都有其对应的类,为什么强引用却没有?试想一下,如果有StrongReference类,那么在自定义缓存中进行引用类型判断时将会比较方便,事实上,在guava的LocalCache中,确实构造了一个StrongValueReference的类,用来包裹一个强引用。

    所以当你想要自己造缓存的轮子时,可以先看看人家的轮子好不好用。

    至此,这一系列就算告一段落了,为了写这一系列文章,花了不少心思,离底层实现越来越近的感觉就像山洞探险,这个探索过程的曲径通幽,柳暗花明处其实就是最好的奖励。

    对于学习,就像是打通经脉的过程,从一个一个零散的点,到慢慢将它们贯通成线,点与点的联结会让人产生极大的快感,最终如果能将这些点编织成网,便像打通奇经八脉那样,知识不过是手到擒来了。

    (这个B装的不错,还多了一些细节在里面,哈哈哈哈,溜了溜了)

  • 相关阅读:
    Python2+appinum基础操作封装
    appinum+python环境搭建
    Python学习-pymysql(一)
    小程序onShow事件获取options方法
    css中content-box和border-box当宽度为百分比时的位置区别,vw和%区别
    JavaScript
    canvas入门基础,七巧板、五角星、粒子时钟等
    JavaScript 自适应轮播图
    css使用padding-bottom百分比进行提前占位,防止抖动
    Dreamweaver配色方案
  • 原文地址:https://www.cnblogs.com/mfrank/p/10472606.html
Copyright © 2011-2022 走看看