针对GC的简单介绍

JVM对自己的内存进行了划分5个区域,分别是堆,栈,方法区,本地方法栈,程序计数器。Java中对每一种类型都规定了具体的不可变的大小。所以所有的内存都是由JVM自动分配,所有的内存管理和回收都是由JVM自动进行的。
对象的回收是由垃圾收集器(Garbage Collector)执行的。默认堆内存的使用率超过70%的时候,会启动GC。

那么堆内存是如何划分的呢?

在堆内存中划分为新生代(Young Generation)和老生代(Old Generation),新生代中又分为幸存者区(Suevivor)和伊甸园区(Eden),而在幸存者区又划分出了to和from两个区域。

对象创建过程:

出生在Eden区,经过一次扫描——>幸存者区(Suevivor),经过多次扫描——>老生代(Old Generation),经历极少次扫描,频率远远低于新生代。

堆溢出错误:

OutOfMemoryError:Java heap space 堆溢出错误

  • 当对象创建后,会在Eden区开辟空间,如果内存不够,会进行第一次初代回收
  • 然后再次尝试Eden区,如果仍未放下会进行第二次初代回收
  • 再尝试Eden区,如果还未放下则会直接尝试放入老生代,如果老生代放不下则进行第一次完全回收
  • 回收后再次尝试放入新生代,如果还未成功则进行第三次初代回收
  • 再次尝试放入新生代,如果放不下则尝试老生代,如果仍放不下则进行第二次完全回收;
  • 回收后再次尝试放入新生代,如果放不下则尝试老生代,如果经历了三次初代两次完全仍未放下,则报堆溢出错误。

GC算法

GC算法分别包括标记-清除,标记-整理,复制算法以及分代回收四种(其实是三种)。
标记-清除:将空间里的对象进行扫描,挂掉的进行一个标记,然后对其进行统一回收,缺点是容易造成空间碎片化,当有大对象放入时可能会再次触发垃圾回收机制;
标记-整理:清理的过程和之前一样,只不过在清理后会整体对空间进行整理,将对象再次排列。缺点是效率低;
复制算法:将内存空间一分为二,也就是Suevivor区的from和to两部分,每次只使用一个,当使用的空间触发垃圾回收以后,将所有存活对象复制到另一部分,然后将使用的空间直接全部清除干净。
分代回收:这个一般是说指jvm的GC算法,在新生代使用复制算法,老生代使用标记-整理或标记-清除算法。

总结:

GC是针对于堆内存的一个垃圾回收机制,默认当堆内存使用超过70%后会自动开启,如果对象经历了三次初代两次完全回收都无法放入,则报OutOfMemoryError:Java heap space(堆内存溢出错误)。

垃圾分代回收机制简单介绍相关推荐

  1. JVM分代回收机制和垃圾回收算法

    JVM系列文章目录 初识JVM 深入理解JVM内存区域 玩转JVM对象和引用 JVM分代回收机制和垃圾回收算法 细谈JVM垃圾回收与部分底层实现 Class文件结构及深入字节码指令 玩转类加载和类加载 ...

  2. java垃圾回收 分代_JVM基础知识(四)- 分代回收机制和垃圾回收算法

    这次我们来讲讲垃圾回收,前边或多或少的都提及过垃圾回收的知识点,我们经常说的GC(Garbage Collection)就是垃圾回收,我们都知道JAVA都是由C++演化而来,那么JAVA和C++很重要 ...

  3. Python的垃圾回收机制(引用计数+标记清除+分代回收)

    一.写在前面: 我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念.在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyOb ...

  4. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收

    JVM垃圾回收机制之堆的分代回收 前言 前文我们了解了Java的GC机制,对于堆中的对象,JVM采用引用计数和可达性分析两种算法来标记对象是否可以清除,本文中我们还会了解到JVM将对分成了不同的区域, ...

  5. heap c语言数组实现,垃圾回收算法实现之 - 分代回收(完整可运行C语言代码)...

    分代垃圾回收(Mark-Sweep GC),并不是一个具体的算法,只是结合了几种垃圾回收算法,把对象按特点进行了分类,对每种特点的对象集执行不同的回收算法,从而提升回收效率 阅读本文之前,你最好已经了 ...

  6. 周志朋java_java中堆和垃圾回收机制的介绍

    java中堆和垃圾回收机制的介绍 发布时间:2020-07-03 14:55:53 来源:亿速云 阅读:113 作者:元一 这篇文章将为大家详细讲解有关java中堆和垃圾回收机制的介绍,文章内容质量较 ...

  7. python分代回收_python 垃圾回收——分代回收 和java有些区别 注意循环引用无法被回收...

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...

  8. 【JVM】垃圾回收算法与分代回收

    文章目录 1. 垃圾回收算法概述 2. 标记-清除算法 3. 标记-复制算法 4. 标记-整理算法 5. 分代回收 本文参考:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) 1. 垃圾回收 ...

  9. Access Token机制简单介绍

    Access Token 机制简单介绍 我们在访问很多大公司的开发 api 的时候,都会发现这些api要求传递一个 access token 参数.这个参数是什么呢?需要去哪里获取这个 access ...

最新文章

  1. cached-query 将缓存和查询数据库高速连接起来的轻类库
  2. Spring框架的事务管理之基于AspectJ的XML方式(重点掌握)
  3. 用双网卡做代理服务器设置具体步骤
  4. js动态获取时间的方式
  5. 实验五 — — Java网络编程及安全
  6. 分布式事务 - 梁飞的博客 - ITeye博客
  7. python基础之面向对象(二)(封装、继承、多态)
  8. 《Lua程序设计》第7章 迭代器与泛型for 学习笔记
  9. 大型论坛系统环境搭建(20万日IP负载平衡实战)–Nginx+Apache2+PHP+MySQL
  10. 因果分析系列5--因果分析中的偏差
  11. GestureDetector--手势识别初体验(一)
  12. 被遗忘的设计模式——空对象模式(Null Object Pattern)
  13. 记录使用element-ui中el-upload的坑
  14. 原型图都可以用什么软件做?分享这9款给你
  15. 2进制 16进制 计算机术语,十六进制转二进制计算器
  16. 信息系统项目管理师 第三章-项目立项管理
  17. 使用gradle集成360加固
  18. (附源码)springboot大学生创新创业管理 毕业设计 041557
  19. 高一信息技术课件python编程_教科版高中信息技术选修第一章第三节Python入门--奇妙曲线的绘制 课件(22张ppt) 教案 (2份打包)...
  20. 创建您的第一个 Flash Professional CS5 文档

热门文章

  1. 计算机配置的内存的容量为4g,安装内存4g2g可用的原因和处理
  2. (心得二)java俄罗斯方块小游戏编写心得
  3. 主机-配件-接口-整机-3c-1
  4. Latex之调节公式中字体的大小
  5. 容联云通讯与吉林联通签署战略合作协议
  6. java epson指令集_EPSON机械手 SPEL+语言指令集
  7. 制作爱奇艺视频播放列表(第六章盒子模型)
  8. 成功实施企业内容管理(ECM)的 5 个技巧
  9. KeePass密码管理工具以及中文包安装
  10. 图片缩放、旋转、加水印