前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )

【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )

作者头像
韩曙亮
发布2023-03-29 16:25:23
7860
发布2023-03-29 16:25:23
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、静态变量


GC Root 对象 :

  • 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ;
  • 方法区 中的 静态引用对象 ;
  • 方法区 中的 常量引用对象 ;
  • 本地方法栈 中的 JNI 中的 引用的对象 ;

所有的 静态变量 都是 GC Root 对象 , 一旦使用了静态变量 , 该变量涉及到的所有引用对象 , 都在以 GC Root 为起点的调用链中 , 这些对象始终都无法变为 垃圾对象 , 无法被回收 , 这就造成了内存泄漏 ;

二、 Java 引用类型 ( 强、软、弱、虚 )


参考博客 : 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )

强引用 , StrongRefrence , Java 默认的引用 , 如果被 强引用 引用的对象 , 永远都不可能被回收 , 即使出现了 OOM ; 内存泄漏也是强引用导致的 ;

软引用 , SoftRefrence , 当 系统内存不足时 , 软引用即使还引用着对象 , 也要将该对象回收 ; 将要出现 OOM 时 , 会回收软引用 ;

弱引用 , WeakRefrence , 不管内存是否充足 , 每次 GC 垃圾回收 , 必定回收弱引用 ;

虚引用 , PhantomRefrence , 使用 get 获取对象时 , 获取到的是 null , 虚引用就是不存在的引用 , 几乎很少使用 ;

强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必回收 ) > 虚引用 ( 回收前通知 )

如果单纯的想避免 OOM , 创建大对象时 建议使用软引用 ;

使用 软引用 , 弱引用 时 , 注意程序的逻辑 , 不要因为出现对象被系统回收 , 导致出现 空指针 异常之类的问题 , 要有备份方案 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、静态变量
  • 二、 Java 引用类型 ( 强、软、弱、虚 )
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档