首页 > 其他分享 >JVM垃圾回收机制

JVM垃圾回收机制

时间:2023-05-27 14:26:07浏览次数:39  
标签:对象 回收 算法 GC 垃圾 JVM 引用

判断一个对象是否存活的方法:

(1)引用计数法:给每个对象设置一个引用计数器,对象被引用时就+1,引用失效时就-1,当对象的引用为0时,该对象就被视为垃圾对象,等待垃圾回收。但是该方法不能解决循环引用问题。例如:A引用B,B应用A。现在的虚拟机一般不用这种方法。

(2)可达性分析法:沿着GC Roots对象(根对象)的引用链向下搜索,能找到的则为存活对象,不能找到的则为垃圾对象。

可以作为GC Roots对象的有以下几种:

(1)虚拟机中引用的对象。

(2)方法区类静态属性引用的变量。

(3)方法区常量池引用的对象。

(4)本地方法栈JNI引用的对象。

垃圾回收算法:

(1)标记清除:会产生内存碎片,现在基本不用这种算法。

(2)标记复制:不会产生内存碎片,新生代GC用这种算法。

(3)标记整理:不会产生内存碎片,老年代GC用这种算法。

(4)分代回收:java虚拟机一般将内存分成新生代和老生代,在新生代中,有大量对象死去和少量对象存活,所以采用复制算法,只需要付出少量存活对象的复制成本就可以完成收集;老年代中因为对象的存活率极高,没有额外的空间对他进行分配担保,所以采用标记清理或者标记整理算法进行回收。

 

标签:对象,回收,算法,GC,垃圾,JVM,引用
From: https://www.cnblogs.com/yhb-blogs/p/17434678.html

相关文章

  • 2023-05-26:golang关于垃圾回收和析构函数的选择题,多数人会选错。
    2023-05-26:golang关于垃圾回收和析构的选择题,代码如下:packagemainimport( "fmt" "runtime" "time")typeListNodestruct{ Valint Next*ListNode}funcmain0(){ a:=&ListNode{Val:1} b:=&ListNode{Val:2} runtime.SetFi......
  • JVM常量池
    常量池:可以看作是一张表,虚拟机指令根据常量表找到要执行的类名、方法名、参数类型、字面量等信息。查看字节码结构的指令:javap-vxxx.class。运行时常量池:当类被加载,会把该类的常量池信息放入运行时常量池中,并把里面的符号地址变为真实地址。......
  • 深度解析 slab 内存池回收内存以及销毁全流程
    在上篇文章《深入理解slabcache内存分配全链路实现》中,笔者详细地为大家介绍了slabcache进行内存分配的整个链路实现,本文我们就来到了slabcache最后的一部分内容了,当申请的内存使用完毕之后,下面就该释放内存了。在接下来的内容中,笔者为大家介绍一下内核是如何将内存......
  • JVM系统参数
    JVM(Java虚拟机)是Java程序的运行环境,它可以通过一些系统参数进行配置和优化。以下是一些常用的JVM系统参数:1.-Xmx:用于设置JVM堆的最大内存大小。例如,-Xmx1g表示将堆的最大大小设置为1GB。2.-Xms:用于设置JVM堆的初始内存大小。例如,-Xms512m表示将堆的初始大小设置为512MB。......
  • hdfs开启回收站(废纸篓)
    1、背景我们知道,在mac系统上删除文件,一般情况下是可以进入废纸篓里的,如果此时我们误删除了,还可以从废纸篓中恢复过来。那么在hdfs中是否存在类似mac上的废纸篓这个功能呢?答案是存在的。2、开启hdfstrash功能当我们启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会......
  • hdfs开启回收站(废纸篓)
    1、背景我们知道,在mac系统上删除文件,一般情况下是可以进入废纸篓里的,如果此时我们误删除了,还可以从废纸篓中恢复过来。那么在hdfs中是否存在类似mac上的废纸篓这个功能呢?答案是存在的。2、开启hdfstrash功能当我们启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会......
  • JVM内存结构
    JVM内存结构由五部分组成:堆:java堆是所有线程共享的一块内存,几乎所有的对象实例和数组都要在堆中分配内存,因此该区域也经常发生垃圾回收操作。方法区:存放已被加载的类信息。比如:常量、静态变量等。虚拟机栈:线程私有的,每个方法执行时都会创建一个栈帧,用来存储局部变量、操作数、......
  • 学习笔记-JVM
    JVM的位置JVM是运行在操作系统上的虚拟机,存在于JRE当中JVM的类型HotSpotSun公司用的基本都是这个JRockitBEAJ9VMIBMJVM的体系结构本地方法接口JNIJNI的作用拓展java的使用,融合不同的编程语言为java所用最初是C/C++因为最初java诞生......
  • JVM中GC Roots及引用类型概述
    JVM中可以用作GCRoots的对象包括以下几种:活动线程(Activethreads):正在执行的线程被视为GCRoots,因为它们持有当前执行状态的信息。静态变量(Staticvariables):被声明为静态的变量属于类,因此它们会一直存在于内存中。JNI引用(JNIreferences):JavaNativeInterface(JNI)引用是在......
  • 电脑文件删除时如何不显示“是否放入回收站”的二次确认窗口?
      本文介绍Windows电脑删除文件时,开启或取消显示确认删除这一提示弹窗的方法。  在Windows电脑中,我们删除任何一个文件时,无论是用鼠标右键选择“删除”选项,还是用快捷键Ctrl与D,默认情况下都会有一个名为“删除文件”的提示框,询问你是否确认要将该文件放入回收站。  在部分......