1.标记-清除算法

最基础的垃圾收集算法,见名知意,该算法分为标记和清除两个阶段。
①首先标记所有需要回收的对象
②标记后,统一回收所有被标记的对象
缺点:
效率问题:标记、清除两个过程效率都不高
空间问题:标记清除之后,产生大量的不连续的内存碎片,空间碎片太多导致以后程序在运行过程中,需要分配较大对象时,无法找到足够的连续的内存,而不得不提前触发另一次垃圾收集动作

2.复制算法

将可用内存按照容量大小,等分为两块,每次只使用其中一块。当一块内存用完后,就把仍然存活的对象复制到另一块上,并把上一块内存一次性清理掉。这样的话,每次都是对整个半区进行内存回收,内存分配也就不用考虑内存碎片的问题了。
目的:为了解决效率问题。
缺点:将内存缩小为原来的一半
现代商业虚拟机都采用此算法回收新生代,但并未1:1等分内存,而是把内存划分为1块较大的Eden空间和2块较小的Survivor空间,每次使用1块Eden和1块Survivor。HotSpot虚拟机默认的Eden和Survivor的比例为8:1。

3.标记-整理算法

复制收集算法在对象存活率较高时,需要大量复制工作,费时费工。于是就有了标记-整理算法。过程和“标记-清除算法”一样,但是后续并非直接对可回收对象进行清理,而是让所有的存活的对象都向一端移动,然后直接清理掉边界以外的内存。

4.分代收集算法

一般把Java堆分为新生代和老年代,这样可以根据各个年代的特点,采用适当的收集算法。
新生代:每次垃圾收集时发现都有大批对象死去,只有少量存活,复制算法是不二选择。
老年代:对象存活率高,没有额外的空间对它进行分配担保,就要选取标记-清除标记-整理算法

JVM中垃圾收集算法相关推荐

  1. JVM中垃圾收集算法总结

      通过前面的介绍我们了解了对象创建和销毁的过程.那么JVM中垃圾收集器具体对对象回收采用的是什么算法呢?本文主要记录下JVM中垃圾收集的几种算法. 文章目录 JVM的垃圾回收的算法 标记-清除算法( ...

  2. JVM(三)--垃圾收集算法

    JVM(三)–垃圾收集算法 这篇博客的内容包括: 一.垃圾收集算法: 1,标记--清除算法: 2,复制算法: 3,标记--整理算法: 4,分代收集算法: 二.涉及到的问题: 1,标记清除,标记整理,复 ...

  3. JVM之垃圾收集算法

    在C++中垃圾回收是需要程序员显示地进行收集,在java语言中是由JVM进行负责垃圾收集的,以下介绍几种垃圾收集算法的思想. 标记-清除算法 标记-清除是最基础的算法,就如其名字一样,分为" ...

  4. JVM之垃圾收集算法和垃圾收集器详解

    这篇文章相比上一篇记录性的,多了不少我自己的理解,花费了很大的功夫整理,如果有时间和精力建议好好看一看深入理解JVM这本书. 也建议熟读背诵. JVM-垃圾收集器和内存分配策略 程序计数器.虚拟机栈. ...

  5. 深入理解JVM(二)--垃圾收集算法

    一. 概述 说起垃圾收集(Garbage Collection, GC), 大部分人都把这项技术当做Java语言的伴随生产物. 事实上, GC的历史远远比Java久远, 1960年 诞生于MIT的Li ...

  6. [读书笔记]JVM的垃圾收集算法

    1.标记-清除算法 (1)算法思想:第一步,标记好所有需要回收的对象:第二步,清除被标记的对象. (2)缺点:时间上,效率不高,无论是标记还是清除操作:空间上,会产生大量不连续的内存碎片,使得占用大内 ...

  7. JVM内存回收算法简述

    2019独角兽企业重金招聘Python工程师标准>>> 在第一代面向对象语言C++中,最让人头疼以及影响敏捷开发的无疑是内存的申请与回收 在程序运行时,使用享元设计使用的一些代码复用 ...

  8. 初探JVM之垃圾收集器

    前面大约了解了下JVM的垃圾收集算法,如果说收集算法是内存回收的方法,那么垃圾收集器就是内存回收的具体实现.现在HotSpot虚拟机都是用的G1收集器. 这里先总结下具体收集器的使用地方: 新生代:S ...

  9. JVM - 再聊GC垃圾收集算法及垃圾收集器

    文章目录 Pre 分代收集理论 常见的垃圾收集算法 标记-清除算法 标记-复制算法 标记-整理算法 垃圾收集器 Serial收集器 Parallel Scavenge收集器 [JDK8默认] ParN ...

最新文章

  1. Python中的标识符有哪些基础原则?
  2. 为什么我的电脑输入法的图标和原来的活动窗口离得那么远
  3. Ubuntu kylin 14.04 LTS上安装opencv
  4. Runnable案例 我赚钱她取钱案例 java1615475726
  5. byte java 空_java – 如何检查字节数组是否为空?
  6. 第十六:Allure-pytest功能特性介绍
  7. Node.js调用百度地图Web服务API的Geocoding接口进行点位反地理信息编码
  8. SpringCloud Greenwich版本集成OAuth2.0
  9. 面试题:数据库的优化
  10. redis缓存hset, hget, hPutAll
  11. html页面出现504,web生产环境故障页面提示504错误
  12. android全屏状态栏是黑色,解决DialogFragment全屏时状态栏变黑
  13. 生信人的20个R语言习题
  14. 网络策略(networkpolicy随笔记)
  15. php guzzlehttp,PHP 使用 Guzzle 发送 HTTP 请求
  16. 台式计算机屏幕亮度在哪调,电脑亮度怎么调?教您电脑亮度在哪里调
  17. 通行宝通过注册:年营收5.9亿拟募资5.6亿 腾讯云与上汽是股东
  18. 谈一谈APP支付失败的处理
  19. perl 获取匹配正则表达式字串
  20. 本周最新文献速递20211212

热门文章

  1. pid调节软件_科学or艺术?——如何优化PID回路以实现最优性能
  2. php 记事本源代码_php实现记事本案例
  3. 河北高速盘点七大假牌假证违法案例:寒冬穿大裤衩开车
  4. 敏捷开发本质 与 敏捷个人本质
  5. Effective_STL 学习笔记(二十八) 了解如何通过 reverse_iterator 的 base 得到 iterator...
  6. 物联网将推动半导体产业继续增长
  7. 鸽巢原理(抽屉原理)的详解
  8. cocos2dx spine之一 :spine缓存 (c++ lua)
  9. android客户端访问服务端tomcat
  10. cocos2d-x 自己写的一个scrollview 有待完善