首页 > 编程语言 >JVM学习记录三(垃圾回收器之标记法及回收算法)

JVM学习记录三(垃圾回收器之标记法及回收算法)

时间:2023-11-22 18:31:25浏览次数:34  
标签:标记 内存 回收 算法 引用 JVM 法及 垃圾

先了解为什么样的垃圾会被回收,哪里的垃圾

  1. 回收的是堆内垃圾,
  2. 当对象没有任何引用指向,那就是垃圾,就有可能被回收回去

怎么定位是可需要被回收的垃圾

  1. 引用计数法:当对象被引用一次那就增加一个一个引用次数,如果未被引用过,则引用次数为0,不过可能会存在循环引用,出现内存泄露的问题

JVM学习记录三(垃圾回收器之标记法及回收算法)_老年代

  1. 可达性计数法:是一种默认的分析算法,利用GC Root,沿着GC ROOT为起点开始关联对象,未找到的就算是可回收的

可作为GC root的对有虚拟机栈中的引用对象、方法区中类静态属性引用的对象、方法区中常量引用对象、本地方法栈中的native方法引用的对象

JVM学习记录三(垃圾回收器之标记法及回收算法)_垃圾回收_02

垃圾回收算法

1.标记清除算法 (分为标记和清除)

1.对根据可达性分析算法分析出的垃圾进行标记

2.对标记的垃圾进行回收

优点:清除速度快

缺点:内存碎片化严重

2.复制算法

JVM学习记录三(垃圾回收器之标记法及回收算法)_老年代_03

内存分为两块空间,标记垃圾后将可用存活复制到另外一块内存区域

优点:在垃圾对象较多的情况下速度较快、清理后无内存碎片

缺点:内存使用户率低

3.标记整理算法

与标记清除算法比,不同点在于整理存活对象至一段,完城后才会进行清理垃圾,可以避免内存碎片问题,性能也较低,很多老年代都会使用这个算法

JVM中的分代回收:

minorGC:指的是发生在新生代的垃圾回收,会有短暂的STW

MixGC:新生代和老年代部分区域的垃圾回收,使用的G1收集齐

full GC:新生代+老年代的全部区域的垃圾回收,暂停时间长

标签:标记,内存,回收,算法,引用,JVM,法及,垃圾
From: https://blog.51cto.com/u_15702726/8519228

相关文章

  • JVM虚拟机详解
    JDK是什么?JDK是用于支持Java程序开发的最小环境。Java程序设计语言Java虚拟机JavaAPI类库JRE是什么?JRE是支持Java程序运行的标准环境。JavaSEAPI子集Java虚拟机Java历史版本的特性?JavaVersionSE5.0引入泛型;增强循环,可以使用迭代方式;自动装......
  • Maybatis-Plus 数据库查询 lambdaQuery和mapper中EQ、NE、GT、LT、GE、LE、select、li
    Maybatis-PluslambdaQuery和mapper中EQ、NE、GT、LT、GE、LE的用法及详解实体当前实体如下,后续代码示例都用该实体;@Data@TableName("user_info")@ApiModel(value="UserInfo对象",description="")publicclassUserInfoimplementsSerializable{privatesta......
  • Lab6:面向功能程序构造方法及创新应用 (创新)
    1.在C++中通过递归方法实现单链表倒置将代码分为几个部分,顺便把之前的链表建立重新写一遍初始化列表structListNode{ intval; LiseNode*next; ListNode(intx):val(x),next(NULL){}};遍历voidquery_node(){ node*p=head; while(p!=NULL){ cout<<p->data<<''......
  • 数学建模之插值法及代码
    发现更多知识,欢迎访问Cr不是铬的个人网站引言数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生”一些新的但又比较靠谱的值来满足需求,这就是插值的作用。插值法的定义......
  • 垃圾回收机制
    引用计数Python中,主要通过引用计数(ReferenceCounting)进行垃圾回收typedefstruct_object{intob_refcnt;struct_typeobject*ob_type;}PyObject;在Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。程序在运行的过程中会实时的更......
  • 04-基础SQL-通用语法及分类
      ......
  • Lab5: 面向功能程序构造方法及创新应用 (基础)
    1、构造两数交换的函数,并验证各种参数形式代码#include<iostream>usingnamespacestd;//交换两个整数的值voidswap(int&a,int&b){inttemp=a;a=b;b=temp;}//交换两个浮点数的值voidswap(double&a,double&b){doubletemp=a;......
  • JVM深入学习-ClassLoader篇(一)
    初识JVM---ClassLoader深入理解ClassLoader、SPI机制Class对象的理解java在诞生之初,就有一次编译到处运行的名言,今天我们来探究一下,从java代码到class到运行,JVM中的ClassLoader充当一个什么样的角色。一个简单的JVM流程图(简单了解)流程图.jpg从位置角度理解JVM:就JVM在......
  • JVM学习记录(基本知识点)
    一、老生常谈,JVM的组成部分有哪些1.类加载器(作用:将字节码文件加载到内存中的运行时数据区)2.运行时数据区(由多个部分组成,也是我们最为普遍较为的区域,大体上讲就是运行程序,包括了程序运行的全生命周期)3.执行引擎(作用:将字节码翻译成底层系统命令交给CPU去执行)4.本地库接口(作用:字节码翻......
  • 数学建模值TOPSIS法及代码
    TOPSIS法TOPSIS法简称为优劣距离解法,是一种常见法综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各个评价方案之间的差距。模型介绍上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多,太多的话n会很大,判断矩阵和一致性矩阵差异可能会很大。其次,其无......