首页 > 编程语言 >JVM的垃圾回收算法--有哪些垃圾回收算法?哪些垃圾收集器?

JVM的垃圾回收算法--有哪些垃圾回收算法?哪些垃圾收集器?

时间:2024-03-25 10:29:05浏览次数:18  
标签:收集 收集器 对象 回收 算法 GC 垃圾

三大假说

  1. 弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。
  2. 强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。
  3. 跨代引用假说(Intergenerational Reference Hypothesis):跨代引用相对于同代引用来说仅占极少数。

垃圾收集器

垃圾收集器:新生代收集器,老年代收集器,混合收集器

部分收集(Partial GC):指目标不是完整收集整个Java堆的垃圾收集,其中又分为:

  • 新生代收集(Minor GC/Young GC):指目标只是新生代的垃圾收集。
  • 老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集。目前只有CMS收集器会有单独收集老年代的行为。
  • 混合收集(Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。

当前我们使用的就是G1收集器。

G1收集器是分区域收集垃圾,不会一下停止所有的操作。但是仍然会对回收的那部分产生影响,我们无法做到不产生影响。只能缩小影响。我们之所以考虑那么多中收集器和垃圾回收算法都是为了减小影响。使其在垃圾回收的时候和其他线程的冲突尽可能降低。

垃圾回收算法

  • 标记清除法:第一遍先把把死亡的对象进行标记,然后第二遍去删除掉标记的对象。缺点是产生空间碎片太多。
  • 标记复制法:将空间分成两部分,一边是空的,另一边存对象。遍历存对象的一边,将存活的对象复制到空白一侧,然后删除原来有对象区域的所有对象。速度快,但是需要的空间大,对内存的损耗大。适用于年轻代。
  • 标记整理法:遍历后将存活下来的对象都整理到一起,不零散分布。内存利用率好,但是性能慢。适用于老年代。

标签:收集,收集器,对象,回收,算法,GC,垃圾
From: https://blog.csdn.net/batcat560/article/details/137006546

相关文章

  • lua lru算法
    --定义一个双向链表节点localNode={}Node.new=function(key,value)localnode={}node.key=keynode.value=valuenode.prev=nilnode.next=nilreturnnodeend--定义LRU缓存类localLRUCache={}LRUCache.new=function(m......
  • 数学算法(算法竞赛、蓝桥杯)--判定质数试除法
    1、B站视频链接:G06判定质数试除法_哔哩哔哩_bilibili题目链接:【深基7.例2】质数筛-洛谷#include<bits/stdc++.h>usingnamespacestd;boolis_prime(intx){ if(x==1)return0;//特判1不是质数 for(inti=2;i*i<=x;i++){//枚举小的那个到根号n即可 if(x%i==0......
  • 【算法】堆排序
    1.堆排序简介堆排序(heapsort)是由J.W.J.Williams于1964年发明的。是一种基于比较的排序算法,和选择排序一样,堆排序将数据序列分为已排序区域和未排序区域两部分。通过从未排列区域中获取最大元素并将其插入已排序区域,迭代这个操作来缩小未排序区域。与选择排序不同的......
  • 代码随想录算法训练营Day54 ||leetCode 392.判断子序列 || 115.不同的子序列
    392.判断子序列 双指针遍历,比较简单易懂classSolution{public:boolisSubsequence(strings,stringt){inta=0,b=0;while(a<s.size()&&b<t.size()){if(s[a]==t[b]){a++;}......
  • 代码随想录算法训练营Day55 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离
    583. 两个字符串的删除操作 这道题的状态方程比上一题简单一些初始化如下classSolution{public:intminDistance(stringword1,stringword2){vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1));for(inti=0;i......
  • 代码随想录算法训练营Day51 ||leetCode 309.最佳买卖股票时机含冷冻期 || 714.买卖股
    309.最佳买卖股票时机含冷冻期  需要新添加状态classSolution{public:intmaxProfit(vector<int>&prices){intn=prices.size();if(n==0)return0;vector<vector<int>>dp(n,vector<int>(4,0));dp[0][0]......
  • 代码随想录算法训练营Day52 ||leetCode 300.最长递增子序列 || 674. 最长连续递增序列
    300.最长递增子序列 classSolution{public:intlengthOfLIS(vector<int>&nums){if(nums.size()<=1)returnnums.size();vector<int>dp(nums.size(),1);intresult=0;for(inti=1;i<nums.size......
  • Offer必备算法16_字符串_四道力扣题详解(由易到难)
    目录①力扣14.最长公共前缀解析代码1(两两比较)解析代码2(统一比较)②力扣5.最长回文子串解析代码(中心拓展)③力扣67.二进制求和解析代码④力扣43.字符串相乘解析代码(无进位相乘)本篇完。①力扣14.最长公共前缀14.最长公共前缀难度简单编写一个函数来查找字符......
  • JavaScript 排序算法
    在这篇文章中,我将介绍几种常见的JavaScript排序算法,并对它们的原理和实现进行详细说明。排序算法是计算机科学中非常重要的基础知识之一,它们可以帮助我们对数据进行有效的整理和排序,提高程序的效率和性能。冒泡排序(BubbleSort)冒泡排序是最简单的排序算法之一,它通过不......
  • 【进阶五】Python实现SDVRP(需求拆分)常见求解算法——自适应大邻域算法(ALNS)
    基于python语言,采用经典自适应大邻域算法(ALNS)对需求拆分车辆路径规划问题(SDVRP)进行求解。目录往期优质资源1.适用场景2.代码调整3.求解结果4.代码片段参考往期优质资源经过一年多的创作,目前已经成熟的代码列举如下,如有需求可私信联系,表明需要的问题与算法......