0
点赞
收藏
分享

微信扫一扫

npm构建vite项目

zidea 2023-07-13 阅读 82

JVM 判断删除对象

引用计数法

引用计数法 (reference counting) :

  • 当用该对象,就用计数器 + 1
  • 当放弃该对象,就用计数器 - 1
  • 当计数器为 0 时 ,就说明可以释放了

问题 : 当对象之间互相引用 ,就会产生依赖关系,就会导致无法释放,出现内存泄漏

  • 当内存太满 ,就会导致内存溢出

Python,PHP 就用的引用计数法 (优化过)

可达性分析算法

该算法的思想 : 通过 GC Roots 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链

  • 当对象到 GC Roots 没有任何引用链相连,就表示此对象是不可用,需要被回收

Object 6 ~ Object 10 之间到 GC Roots 不可达 : 被回收的对象

image.png

GC Roots 的对象

  • 虚拟机栈 (栈帧中的本地变量表) 中引用的对象
  • 本地方法栈 (Native 方法) 中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用的对象
  • 所有被同步锁持有的对象

无用的类的 3 个条件 :

  • 该类所有的实例都被回收
  • 加载该类的 ClassLoader 已被回收
  • 该类的 java.lang.Class 对象没被引用

引用类型

JDK1.2 后,对引用分 (引用强度 : 逐渐减弱) :强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference)

强引用 : GC 不会回收它 , 报 OOM 都不会

  • 对象引用变量 : Objectobj=newObject();
  • 实例变量 : this.data = data;
  • 静态变量 : public static final String CPU_CODE="cpucode";

软引用 : 当内存足够,不会回收,只有当内存不足时,就会回收这些对象的内存

  • SoftReference<Object> softRef = new SoftReference<>(bigObject);

弱引用 : 只要被发现 ,就回收

  • WeakReference<byte[]> cacheRef = new WeakReference<>(cacheData);

虚引用 : 任何时候都可能被回收

  • PhantomReference
举报

相关推荐

0 条评论