可达分析算法与回收算法

本文详细介绍了Java虚拟机如何判断对象是否可回收,主要使用可达性分析算法,通过GC Roots找到存活对象。同时,讨论了四种引用类型:强、软、弱、虚引用,以及它们对垃圾回收的影响。此外,文章还涵盖了各种垃圾回收算法,如标记清除、标记整理和标记复制,以及分代算法在新生代和老年代的应用。最后,讨论了Java8默认的并行收集器以及如何避免频繁触发垃圾回收器以优化JVM性能。
摘要由CSDN通过智能技术生成

目录

1、Java虚拟机如何判断对象是否可以回收?

2、Java虚拟机可达性分析算法(Java虚拟机使用)

3、Java虚拟机对象四种引用:强、软、弱、虚

4、回收算法标记清除、标记整理、标记复制算法

5、Java虚拟机分代算法:新生代/老年代   from/to  原理 

6、JVM虚拟机参数有哪些?

7、System.gc是否一定清理内存垃圾?

8、如何理解GC种StopThe World问题?

9、在生产环境中调优jvm:避免触发垃圾回收器频繁回收。

10、常见七种垃圾收集器实现原理

11、新生代和老年代的垃圾收集器搭配

12、Java8默认使用什么收集器?并行收集器(Parallel)

13、垃圾收集器与垃圾算法的区别?


1、Java虚拟机如何判断对象是否可以回收?

  判断内存中的对象是否有被引用,如果没有则可以回收。
  引用计数法:对象如果被引用的情况下就会+1,如果该对象的引用次数为0的情况下,则认为是垃圾对象。
  缺陷:java中没用过。如果A引用B,B引用A,两个对象相互引用,永远不会当作垃圾处理。

2、Java虚拟机可达性分析算法(Java虚拟机使用)

        关键词:GC Roots,标记。虚拟机栈、本地方法栈、方法区(元空间)

  可达性分析:将“GC Roots”的对象作为起点开始向下搜索,搜索所走过的路径称为引用链,当一个对象没有被任何应用链相连时,没有做标记,则证明该对象是不可用的。 
  哪些可以作为GC Root:虚拟机栈、本地方法栈、方法区中引用的对象
    1)虚拟机栈(栈帧中的本地变量表)中引用的对象。
    2)本地方法栈中JNI引用的对象
    3)元空间(方法区)中类静态属性引用对象
    4)方法区中的常量引用的对象

3、Java虚拟机对象四种引用:强、软、弱、虚

        关键词:永远不回收、溢出回收、gc回收、随时回收

  强引用(StrongReference):对象默认关联强引用。被引用关联的对象永远不会被垃圾收集器回收,即使内存溢出,也不会回收。
  软引用(SoftReference):软引用关联的对象,只有当系统内存溢出时,才会回收软引用的对象。
  弱引用(WeakReference):只被弱引用关联的对象,当垃圾回收机制触发的时候就会被回收,不论内存是否够。
  虚引用:和没有引用一样,随时可能被回收,不触发GC时也会被回收。

4、回收算法标记清除、标记整理、标记复制算法

1)标记清除算法

  标记清除算法:标记被引用的对象,清除未被标记的对象。
  优点:算法实现简单
  缺点:清除之后会导致内存空间不连续,以至于空间利用率不高,容易产生空间【碎片化】。
       
应用场景:CMS并发收集器(用于老年代垃圾回收)。

2)标记整理算法(老年代)

  标记整理算法:标记清除算法的升级版,将存活的对象向内存空间一端进行移动,然后直接清理掉边界以外的内存区域。
  优点:空间具有连续性,不会产生空间碎片化问题
  缺点:对象引用的内存地址会发生变化,效率比较低
       应用场景:Serial Old(串行)、Parallel Old(并行)垃圾收集器的收集目标都是老年代。
  当触发gc回收的时候,有可能会stop-the-world暂停用户的线程

3)标记复制算法(新生代ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值