`
haoran_10
  • 浏览: 443208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JVM学习(2)-JVM垃圾回收算法

阅读更多
java虚拟回收垃圾对象时,一份分为两步:
1、虚拟机在回收堆空间在之间,会先判断哪些对象已经死亡;
2、然后再对这些死亡对象通过特定的回收算法进行回收
 
一、判断对象是否死亡
1、引用计算器算法
给对象添加一个引用计算器,如果其他地方引用它,计算器就加1,当引用失效时,计算器就减1。当计算器为0时,这个对象不能被再次使用,需要被回收了。
优点:实现简单
缺点:不能解决对象之间相互循环引用的问题。
 
2、根搜索算法GC Roots Tracing
通过一系列的名为GC Roots作为对象为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连,也就是不可达(图论中迪杰斯特拉算法),证明此对象是不可用的。
在java语言里,可作为GC Roots的对象包括以下几种:
  • 虚拟机栈(栈帧中的本地变量表)中引用的对象
  • 方法区中的类静态属性引用的对象
  • 方法区中的常量引用的对象
  • 本地方法栈中JNI(即一般说的Native方法)的引用的对象
ps:会进行二次判断,在判断对象为死亡对象后,虚拟机会吧对象放到F-QUEUE队列里,然后启动一个线程去扫描,如果发现扫描后依然没有被引用,那么就直接回收了。
 
 
二、垃圾回收算法
1、标记-清除算法
分为标记和清除两个阶段,首先标记处需要清除的对象,标记完成之后统一回收掉所有被标记的对象。
缺点:效率低,造成碎片比较多
 
2、复制算法
把可用内存分为相等的两份,每次只是用一块。当这一块内存用完了,就把所有的存活的对象都复制到另外一份内存块中,然后一次性全部把这块内存清除掉。
现在很多虚拟机就是采用这种方式回收新生代。新生代分为一块大的Eden空间,和两块小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,把Eden和Survivor还存活的对象一次性全部拷贝到另外一块Survivor空间上,最后清理掉Eden和刚才使用的Survivor空间。如果Survivor空间不够时,会向老年代进行借一部分内存。
优点:简单高效,碎片率也比较低。
 
3、标记-整理算法
如果存活率比较高,那么使用复制算法就不适用。
把所有的存活对象都往前端转移,然后直接清理掉端边界以外的内容。 
针对老年代使用。
 
4、分代收集算法
现在的虚拟机一般都是采用这种方式。
把java堆分为新生代和老年代,新生代则采用复制算法,老年代则采用标记-整理算法。

 

0
0
分享到:
评论

相关推荐

    JVM面试资料:JVM结构、JVM调优、四大垃圾回收算法、七大垃圾回收器

    四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old、G1 JVM调优:命令行指令,设置堆内存大小的参数

    JVM之基本的垃圾回收算法汇总

    这篇博客将探讨JVM中的基本垃圾回收算法,帮助我们更好地理解JVM内存管理的原理。 1. 标记-清除(Mark-Sweep)算法 这是最早的垃圾回收算法之一。它分为两个阶段:标记和清除。首先,从根节点开始遍历所有可达对象...

    mini-jvm in rust实现jvm,jvm-rs-main.zip

    3. 垃圾回收:Rust的内存管理机制与JVM的垃圾回收有异曲同工之妙,但需要自定义实现GC策略,如引用计数或标记-清除算法。 4. 执行引擎:使用Rust的迭代器和控制流结构实现字节码的解释执行。 五、实践与挑战 在...

    09 Java基础-JVM垃圾回收-玉峰1

    3. **垃圾回收算法** - **标记-清除**:首先标记所有可达对象,然后清除未标记的对象。 - **复制**:将内存分为两部分,每次只使用一半,当一半填满后,将存活对象复制到另一半,然后清空原半区。 - **标记-整理*...

    JVM性能调优-JVM内存整理及GC回收

    这份文档详细阐述了JVM性能调优的关键概念,包括JVM内存模型、垃圾回收(Garbage Collection, GC)的原理以及各种垃圾回收算法,这些都是JAVA程序员在日常工作中需要理解和掌握的核心技术。 首先,JVM内存模型是...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)算法 第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS...

    JVM性能调优-JVM内存整理及GC回收.docx

    JVM性能调优-JVM内存整理及GC回收 JVM(Java Virtual Machine)性能调优是 Java ...JVM 性能调优需要深入理解 JVM 的工作机制和垃圾回收算法,然后根据实际情况选择合适的垃圾回收器和配置参数,以提高 JVM 的性能。

    JVM性能调优-JVM内存整理及GC回收.pdf

    了解Java对象引用类型、垃圾回收算法以及分代处理垃圾的概念是进行JVM性能调优的基础。这些知识点对于准备Java面试的开发者来说,是必须掌握的重要内容,同时也是深入理解JVM内存管理和性能优化的基础。

    JVM历史发展和内存回收笔记

    2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,然后清除未标记的对象。缺点是容易产生内存碎片。 - **复制(Copying)**:将内存分为两块,每次只使用一块,当一块用完后,将...

    Jvm性能优化-JVM内存结构原理分析03

    在Jvm中,还有很多其他的知识点,如HotSpot虚拟机、JIT编译、垃圾回收算法等,它们都是Jvm性能优化的重要组成部分。 Jvm性能优化是Jvm中非常重要的一部分,它对Jvm的性能产生了很大的影响。了解Jvm内存结构、垃圾...

    03-VIP-JVM内存分配机制与垃圾回收算法1

    Java虚拟机(JVM)内存分配机制和垃圾回收(Garbage Collection, GC)是Java编程中的核心概念,它们直接影响到程序的性能和稳定性。本文主要围绕JVM内存区域的分配策略,尤其是对象在新生代(Young Generation)的...

    (源码)基于Java虚拟机(JVM)的内存管理与垃圾回收系统.zip

    3. 垃圾回收算法介绍了标记清除、复制、标记整理等垃圾回收算法,并详细分析了CMS和G1垃圾收集器的工作原理。 4. JVM调优提供了JVM调优的实战指南,包括如何选择合适的垃圾收集器、调整堆内存大小、设置GC停顿时间等...

    用于测试jvm gc调优-share-jvm-gc.zip

    垃圾收集器的主要任务是识别并回收不再使用的对象所占用的内存空间,以防止内存泄漏。Java提供了多种不同的垃圾收集器,如Serial、Parallel、CMS(Concurrent Mark Sweep)、G1(Garbage First)和ZGC(Z Garbage ...

    JVM性能调优-JVM内存整理及GC回收.pdf_java_jvm_

    本资料深入探讨了如何通过调整JVM内存设置和优化垃圾回收机制来提升应用性能。 一、JVM内存结构 JVM内存主要分为以下几个区域: 1. **堆内存(Heap Memory)**:这是Java对象的主要存储场所,分为年轻代和老年代...

    JVM规范--高手总结

    4. **垃圾收集(GC)**:Java的自动内存管理主要依赖于GC,它负责回收不再使用的对象所占用的内存。垃圾收集有多种算法,如引用计数法、标记-清除、复制、标记-整理和分代收集等。其中,引用计数法简单但难以处理...

Global site tag (gtag.js) - Google Analytics