首页 > 编程语言 >java 垃圾回收算法

java 垃圾回收算法

时间:2023-04-14 15:13:17浏览次数:35  
标签:java 标记 新生代 算法 复制 垃圾 内存

标记-清除

把非垃圾对象进行标记,把未标记的进行清除。这是最基础的算法,别的算法都是基于此不断改进

不足的地方

  • 效率不高(要看跟谁比,比如标记-复制就要快些)
  • 内存碎片:会产生大量不连续的内存碎片,导致可能无法给大对象分配内存

标记-整理

还是要先标记哪些对象是垃圾,标记了先不着急清除,先把非垃圾对象移动到一端,然后把边界之外的(就是垃圾对象)清除

标记-复制

  • 把内存分为两块,只使用其中一块,这样标记的时间肯定就少(毕竟只检索一半的内存)
  • 把存活对象顺序复制到另一块内存(同时清理本部分),不会有内存碎片
  • 缺点是浪费一半空间,典型的空间换时间
  • 新生代的垃圾回收采用这种算法,但是并不是把整个新生代内存一分为二,这样就太浪费了,而是只是新生代中较小的幸存区分为两块

分代垃圾回收

这并不是一种新的算法,而是对不同代采用不同的垃圾回收算法

  • 新生代:采用 标记-复制 算法
  • 老年代:采用 标记-清除 或者 标记-整理 算法

新生代不适合标记-整理吗?

同理,老年代不适合标记-复制吗?

  • 新生代发生的 GC 频率高,所以需要时间高效的算法;并且 Eden 和 两个幸存区的比例默认是 8:1:1,所以新生代使用率是可以达到 90%,空间上也不是特别浪费
  • 老年代发生 GC 频率不高,并且内存占用比较大,所以 标记-复制 不合适

标签:java,标记,新生代,算法,复制,垃圾,内存
From: https://www.cnblogs.com/hangychn/p/17318346.html

相关文章

  • JavaScript 之 JSON [4] parse()和stringify() -JSON字符串和JavaScript对象数据之间
    JavaScript之JSON[4]parse()和stringify()-JSON字符串和JavaScript对象数据之间的相互转换1、JSON.parse()JSON.parse()方法用于将一个JSON字符串解析为一个JavaScript对象。JSON字符串必须使用双引号包括属性名和字符串值,不能使用单引号或无引号。语法:JSON.parse(text,r......
  • 使用Java反射机制将类的属性名和属性值打印出来
    可以使用Java反射机制来读取类的属性名和属性值。以下是一个示例代码,可以输出指定类的所有属性及其对应的值:1publicstaticvoidprintFields(Objectobj){2Classclazz=obj.getClass();3Field[]fields=clazz.getDeclaredFields();4for(Fieldfie......
  • Java概述(简略)
    Java概述计算机程序:一系列有序指令的集合计算机语言发展史:机器语言-->汇编语言-->高级语言Java技术体系:JavaSE(JavaPlatform,StandardEdition标准版):允许您在桌面和服务器上开发和部署Java应用程序。Java提供了丰富的用户界面、性能、多功能性、可移植性和当今应用程序所需......
  • 关键的Java JVM选项和参数
    1.关键的JavaJVM选项和参数让我们来看看在Java环境中可以配置的21个最重要的JVM选项和参数。-Xms:将设置JVM的初始堆大小。-Xmx:将设置JVM的最大堆大小。-Xss:将设置每个线程的内部使用的线程堆栈的大小。-XX:+UseCompressedOops:启用使用压缩对象指针以减少内存使用的功能。-......
  • Java 生成ID 有哪些方式
    除了雪花算法,Java中还有其他生成ID的方法,其中一些常见的包括:UUID(UniversallyUniqueIdentifier):使用随机数生成128位的唯一标识符。Java提供了UUID类来实现此功能。基于时间戳的序列号生成器:使用当前时间戳生成序列号,保证唯一性。这种方法需要考虑时间回拨和并发访......
  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描......
  • java 引用类型
    共分为4种,强弱软徐强引用直接使用new创建的对象。当触发GC时,只要是垃圾就回收软引用当触发GC时,与是否是垃圾对象无关,意味着不管是不是垃圾对象都不会被回收,只有当内存不足时才回收(内存缓存场景)Objectobj=newObject();SoftReference<Object>sf=newSoftReferenc......
  • 如何设计一个给商城用的推荐算法
    要设计一个给商城用的推荐算法,可以考虑以下步骤:收集数据:收集商城的用户行为数据,包括用户购买历史、搜索历史、浏览历史、评分等信息。这些数据可以用于分析用户的兴趣和行为模式。数据预处理:对收集的数据进行预处理,包括去除异常值、填充缺失值、归一化等操作。特征提取:从......
  • 算法基础模板整理(动态规划篇)
    背包问题01背包问题static const int N = 1010;int dp[N][N], v[N], w[N], n, c;int main(){    cin >> n >> c;    for(int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i];    for(int i = 1; i <= n; i ++ )    ......
  • 字符串匹配算法KMP
    KMP算法是字符串的匹配算法,比如我给一个名为《文本》的字符串,和一个名为《样板》的字符串,询问《样板》在《文本》中出现过的次数,这就需要字符串匹配算法。对于匹配,形象一点可以看例子:《文本1》="abcdefghigklmn"《样板1》="abc"=============================《文本2》="abcde......