栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Jvm 垃圾回收策略

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jvm 垃圾回收策略

目录

什么场景下该使用垃圾回收策略

垃圾回收发生在哪些区域

对象在什么时候能够被回收

 根对象(GC Roots)包括哪些对象

Java中四种引用对象

强引用 (Strong Reference)

软引用 (Soft Reference)

弱引用 (Weak Reference)

虚引用 (Phantom Reference)


什么场景下该使用垃圾回收策略
  • 对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存
  • 在Cpu使用率高的情况下:降低高并发垃圾回收的频率,让CPU更多的去执行你的业务而不是垃圾回收

垃圾回收发生在哪些区域

 堆和方法区线程共享,垃圾回收的主要对象。方法区回收废弃的常量和不需要使用的类。

对象在什么时候能够被回收

引用计数法:通过对象的引用计数器来判断是否被引用。但是解决不了循环引用的问题

A → B → C → D → B  当A 不引用 B的时候,理论上BCD都要被回收,但是他们3个之间循环引用,引用计数器不为0,所以不能被回收

可达性分析:以根对象(GC Roots)作为起点向下搜索,走过的路径被称为引用链(Reference Chain),如果某个对象到根对象没有引用链相连时,就认为这个对象时不可达的,可以回收。

 根对象(GC Roots)包括哪些对象
  • 虚拟机栈(栈帧中的本地变量表)中的引用对象
  • 方法区中类静态属性引用的对象
  • 方法去中常量引用的对象
  • 本地方法栈中JNI(即 Native方法)引用的对象

Java中四种引用对象

分别是  强引用、软引用、弱引用和虚引用。

强引用 (Strong Reference)

只要是强引用的类型,那么垃圾回收的时候绝对不会去回收这个对象的

 例如这种就是强引用:User user = new User()

软引用 (Soft Reference)

用来描述一些有用但非必须的对象。软引用关联的对象,只有在内存不足的时候才会回收。利用这个特性软引用就适合用来做些缓存,比如网页缓存,图片缓存

把 “ User ” 实例对象用一个“SoftReference”软引用类型的对象给包裹起来了
static SoftReference userSoftReference = new SoftReference(new User());

弱引用 (Weak Reference)

弱引用也是用来描述非必须的对象的。当Jvm垃圾回收的时候,无论内存是否充足,都会被回收弱引用关联的对象

WeakReference 包裹的对象
WeakReference  user = new WeakReference (new User());

虚引用 (Phantom Reference)
ReferenceQueue queue = new ReferenceQueue<>();
PhantomReference pr = new PhantomReference<>("aa",queuq)
虚引用必须和ReferenceQueue配合

可达性算法当判断一个对象即使不可达,也不一定会被回收。还会经历下面这一步骤

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/460021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号