jvm垃圾回收机制

1.判断对象是否已死:

  1.引用技术法:给对象添加引用计数器纪录被引用次数

    实现简单判定高效、但是无法解决对象循环引用的问题,实际上较少使用

  2.可达性分析算法:从gc root对象作为起点向下搜索引用链,与引用链不能相连的对象即被判定为可回收对象。gcroot:本地变量表中引用对象、类静态属性引用对象、方法常量引用对象、native方法引用对象

      主流商用语言使用

2.引用

    1.强引用:赋值引用,只要存在就不会被回收

      2.软引用:有用但非必需,在内存溢出前才被第二次回收,若回收后内存仍不够才会抛出内存溢出异常

      3.弱引用:被引用对象只能存活到下次垃圾回收之前,垃圾收集器工作时无论内存是否足够都会回收

      4.虚引用:对对象生存时间不会构成影响,仅起到被回收前进行系统通知的作用

3.对象被回收过程:

    1.第一次标记:可达性分析认为可回收

      2.第二次标记:对象的finalize()方法被调用期间仍未与引用队列上对象建立引用关系

    3.被真正回收

4.垃圾回收算法

    1.标记清除算法:标记出需要回收对象,然后统一进行回收

        标记、清除效率都不高;清除完成后产生大量内存碎片,不好对较大对象进行内存分配

      2.复制算法:将内存一分为二,一块用于存储,空间用完后将还存活的对象一次性复杂到另一半,并清除掉前一半所有数据

        运行效率高,不用考虑碎片问题。现多用于新生代(回收率高),分为一块大内存与两块小内存,在大的和其中一块小的上面进行存储,回收时将存活对象复制到另一块小内存上。

      3.标记整理算法:标记后将所有存活对象移动到一起,然后清除存活对象范围外内存

        针对对象存活率较高的老年代,避免了较多的复制次数及额外空间分配

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述: 本文作为大数据基础的Java部分,上一篇说明了Linux的常用命令,今天学习了Java的高级特性,我们...
    慕久久阅读 764评论 1 5
  • 1. 概述 在Java内存区域里讲了Java的内存运行时数据区域分为如下5个部分 程序计数器(Program Co...
    谢朴欢阅读 290评论 0 0
  • 1. 前言 网上关于jvm gc的文章有很多,写这篇文章不是有什么新东西要讲,主要原因是工作时也偶尔碰到比如ful...
    aaron1993阅读 1,277评论 0 0
  • 最近比较粗浅的接触了一下JVM,发现有很多东西还是非常有意思的,并不像之前的印象,觉得JVM相关的东西生涩难懂。本...
    UncleYee阅读 1,056评论 1 12
  • 你是女人么 就为女人开着花 隐喻着语言 不止半边天呦 梦和理想 在你的胸膛里 用万紫千红的姿态 光芒四射和呈现 营...
    龙青阅读 187评论 3 16