java中有四种垃圾回收算法,分别是:

标记清除法、标记整理法、复制算法、分代收集算法

1、标记清除法:
第一步:利用可达性去遍历内存,把存活对象和垃圾对象进行标记;

第二步:在遍历一遍,将所有标记的对象回收掉;

特点:效率不行,标记和清除的效率都不高;标记和清除后会产生大量的不连续的空间分片,可能会导致之后程序运行的时候需分配大对象而找不到连续分片而不得不触发一次GC(垃圾回收);

2、标记整理法:
第一步:利用可达性去遍历内存,把存活对象和垃圾对象进行标记;
第二步:将所有的存活的对象向一段移动,将端边界以外的对象都回收掉;

特点:适用于存活对象多,垃圾少的情况;需要整理的过程,无空间碎片产生;

3、复制算法:
将内存按照容量大小分为大小相等的两块,每次只使用一块,当一块使用完了,就将还存活的对象移到另一块上,然后在把使用过的内存空间移除;
特点:不会产生空间碎片;内存使用率极低;

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

java中的垃圾回收算法相关推荐

  1. java中的垃圾回收算法与垃圾回收器

  2. Java中的垃圾回收与对象生命周期

    转载自   Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...

  3. 【java虚拟机序列】java中的垃圾回收与内存分配策略

    在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...

  4. 一篇文章搞定java中的垃圾回收机制面试题

    一篇文章搞定java中的垃圾回收机制面试题 任何语言在运行过程中都会创建对象,也就意味着需要在内存中为这些对象在内存中分配空间,在这些对象失去使用的意义的时候,需要释放掉这些内容,保证内存能够提供给新 ...

  5. Java中的垃圾回收

    转载自http://www.wolfbe.com/detail/201609/365.html GC算法基础 摘要:研究人员发现应用中绝大多数的内存分配会分为两大类:绝大部分的对象很快会变为不可用状态 ...

  6. Java中的垃圾回收原理

    用户程序(mutator)会修改还堆区中的对象集合,从存储管理器处获取空间,创建对象,还可一引入和消除对已有对象的引用. 当mutator不能"达到"某些对象的时候,这些对象就成了 ...

  7. [转载] Python和java中的垃圾回收机制

    参考链接: Python中的垃圾回收 Python的垃圾回收机制 Python的垃圾回收机制有两种(也可以说一种:叫引用计数): 一是引用计数, 二是隔代回收. 引用计数 引用计数原理: 当数据的引用 ...

  8. 第八章软件构造的性能——构造性能的度量、原则与方法(java中的垃圾回收机制及算法)

    这节内容真的是多到炸裂,而且全都是概念,不过很挺有用的,学完这节会对内存管理有一个比较深的理解和认识,就是--这也太多了--嘤嘤嘤T_T 1.性能度量(performance metrics) 第一点 ...

  9. 《对Java的分析总结》-Java中的垃圾回收机制中的标记-清除算法 (五)

    标记-清除算法 标记-清除算法(mark-sweep 1 标记-清除算法 回收过程描述 类别 描述 mutator 设置 collector 收集 mutator roots mutator根对象 1 ...

最新文章

  1. 南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup
  2. linux配置qt使用git,Linux操作系统下安装使用说明.txt
  3. C#编程中的crc16校验
  4. Jenkins持续集成环境之tomcat的安装和配置
  5. nginx动静分离配置_nginx动静分离实战
  6. Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)...
  7. c++ 线性回归_模型之母:简单线性回归的代码实现
  8. sharing-jdbc实现读写分离及分库分表
  9. python中合法命名的变量名_「变量名」python中变量的命名以及使用 - 金橙教程网...
  10. 刷脸支付打造了一个无卡交易的时代
  11. window常用设置和命令
  12. ros重置后地址_初始化ROS路由器后,怎么使用Setup 指令配置IP地址?
  13. lpad()函数oracle,oracle 中lpad的用法
  14. 编写MapReduce程序计算平均分
  15. ARM芯片内部堆栈的理解及MAP文件的查看
  16. Android HOME键那些事
  17. AcWing1017.怪盗基德的滑翔翼
  18. 酷派android最新版本,酷派手机怎么升级系统 酷派手机系统升级操作方法介绍
  19. 如何有效利用大数据预测能力
  20. python 静态网站生成_最全的静态网站生成器(开源项目)

热门文章

  1. Processing Java Annotations Using Reflection
  2. 原成都传智播客团队更名新品牌名源代码教育
  3. 清华大学有色金属产业(CEO)高级工商管理研修班(五期)
  4. 函数式编程与高阶函数
  5. 输出小强还是旺财??
  6. 摆脱海王式电销,外呼系统提升销售效率业绩
  7. 计算机系统知识讲解视频教程,考研计算机视频讲解视频教程
  8. 嵌入式Linux移植littlevgl7,安富莱V6移植littlevgl的前因后果,附移植好的工程(未优化)...
  9. 真假蜘蛛识别php,【PHP】检测搜索蜘蛛真假IP支持:谷歌、百度、搜狗、必应、yandex、360搜索;...
  10. 电脑快捷键小妙招:常用快捷键你知道吗?