首页 > 编程语言 >JVM垃圾回收策略机制和算法

JVM垃圾回收策略机制和算法

时间:2024-06-15 13:54:19浏览次数:23  
标签:对象 内存 回收 算法 GC 垃圾 JVM 引用

判断对象的存活

引用计数法
给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。(Python 在用,但主流虚拟
机没有使用)
优点:快,方便,实现简单。
缺陷:对象相互引用时(A.instance=B 同时 B.instance=A),很难判断对象是否该回收。

可达性分析(Java 中使用)
(面试时重要的知识点,牢记)
判定对象是否存活。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为
引用链(Reference Chain),当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是不可用的。
作为 GC Roots 的对象包括下面几种:
1.当前虚拟机栈中局部变量表中的引用的对象
2.当前本地方法栈中局部变量表中的引用的对象
3.方法区中类静态属性引用的对象
4.方法区中的常量引用的对象

各种引用(Reference)
强引用
一般的 Object obj = new Object() ,就属于强引用。
(如果有 GCroots 的强引用)垃圾回收器绝对不会回收它,当内存不足时宁愿抛出 OOM 错误,使得程序异常停止,也不会回收强引用对象。

软引用 SoftReference
垃圾回收器在内存充足的时候不会回收它,而在内存不足时会回收它

软引用非常适合于创建缓存。当系统内存不足的时候,缓存中的内容是可以被释放的。

弱引用 WeakReference
垃圾回收器在扫描到该对象时,无论内存充足与否,都会回收该对象的内存。

虚引用 PhantomReference
幽灵引用,最弱,被垃圾回收的时候收到一个通知

GC(Garbage Collection)
jvm参数设置
-Xms 堆区内存初始内存分配的大小
-Xmx 堆区内存可被分配的最大上限
-XX:+PrintGCDetails
打印 GC 详情
-XX:+HeapDumpOnOutOfMemoryError

Minor GC
特点: 发生在新生代上,发生的较频繁,执行速度较快
触发条件: Eden 区空间不足\空间分配担保

Full GC
特点:主要发生在老年代上(新生代也会回收),较少发生,执行速度较慢
触发条件:
调用 System.gc()
老年代区域空间不足
空间分配担保失败
JDK 1.7 及以前的永久代(方法区)空间不足
CMS GC 处理浮动垃圾时,如果新生代空间不足,则采用空间分配担保机制,如果老年代空间不足,则触发 Full GC

标签:对象,内存,回收,算法,GC,垃圾,JVM,引用
From: https://www.cnblogs.com/velloLei/p/18249258

相关文章

  • 雪花算法和UUID
    目录雪花算法概念优点和不足优点:缺点:解决方案代码示例UUID优点与不足优点不足两种算法的比较应用场景区别雪花算法概念雪花算法是一个分布式id生成算法,它生成的id一般情况下具有唯一性。由64位01数字组成,第一位是符号位,始终为0。接下来的41位是时间戳字段,根......
  • 算法第六天:力扣第977题有序数组的平方
    一、977.有序数组的平方的链接与题目描述977.有序数组的平方的链接如下所示:https://leetcode.cn/problems/squares-of-a-sorted-array/description/https://leetcode.cn/problems/squares-of-a-sorted-array/description/   给你一个按 非递减顺序 排序的整数数组 n......
  • JVM运行时数据区(线程相关)
    一、JVM运行时数据区JVM运行时数据区是一个抽象概念,主要依赖于寄存器、高速缓存、主内存几个部分组成。计算机运行=指令+数据,指令用于执行方法,数据用于指向存放的数据和对象。虚拟机栈---用于执行java方法本地方法栈---执行本地方法(通常时c语言实现的)程序计数......
  • 【TF-IDF算法】
    ......
  • 安全算法 - 加密算法
    本文主要介绍安全算法之加密算法。数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将......
  • 安全算法 - 摘要算法
    本文主要介绍安全算法-摘要算法相关的内容。消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分......
  • 算法3.1—深度优先搜索
    P1219[USACO1.5]八皇后CheckerChallenge#includeusingnamespacestd;typedeflonglongll;intn,l[50],r[50],vis[50],a[50];intans;voiddfs(intx){if(x>n){if(ans<3)for(inti=1;i<=n;i++)cout<<a[i]<<''......
  • 代码随想录算法训练营第三十八天 | 62.不同路径 63.不同路径II 343.整数拆分 96.不同
    62.不同路径题目链接文章讲解视频讲解dp[i][j]:到达(i,j)位置有多少种方法递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1]初始化dp[0][j]=1只有向右一种走法,dp[i][0]=1只有向下一种走法;遍历顺序:从左向右打印dp数组classSolution{public:intuniquePaths......
  • 代码随想录算法训练营第11、12天 | 逆波兰表达式、滑动窗口最大值、前 K 个高频元素
    逆波兰表达式题目https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/逆波兰表达式代码随想录https://programmercarl.com/0150.逆波兰表达式求值.html#其他语言版本滑动窗口最大值https://leetcode.cn/problems/sliding-window-maximum/滑动窗口......
  • 基于SpringBoot+Vue+uniapp微信小程序的垃圾分类系统的详细设计和实现(源码+lw+部署文
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......