针对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. poj2154-color-polyan次二面体+欧拉函数优化
  2. Attention最新进展
  3. bestcoder #71 1003 找位运算的最大生成树
  4. python数据库操作sqlite_Python操作mysql和sqlite
  5. qtp启动java程序_转: QTP六脉神剑之调用Java程序
  6. 不支持所上传的文件格式。请确认选择的文件无误。_职场人必备!如何把PDF文件转换成word文档?...
  7. 20210621:力扣第246周周赛(上)
  8. java上拉变量_「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
  9. Luogu4921/4931 情侣?给我烧了! 组合、递推
  10. 《WebGL编程指南》学习笔记——1.WebGL概述
  11. 烧钱两年,做事对得起工资,也要对得起公司这份决心
  12. 经典游戏扫雷详解--你也可以写出扫雷和玩好扫雷
  13. 【Java】日期格式化的三种方式
  14. 渗透测试漏流程(PTES)
  15. 极兔速递电子面单API接口-快递鸟
  16. [prolog 基础系列] Prolog 的使用以及 Knowledge Base
  17. 马云控股“中国文化”什么暗藏玄机?
  18. RNA-seq 详细教程:似然比检验(13)
  19. 陈吉平-阿里巴巴离职DBA在35岁总结的职业生涯
  20. mpu9250磁力计校准 mpl库数据校准

热门文章

  1. Weblogic10.3_Windows优化设置
  2. 2.4 找准位置,水滴石穿
  3. stm32板间串口通信escape协议
  4. 分享一 AutoJs 蚂蚁森林自动收取能量和偷取能量
  5. mysql drop后回收站怎么恢复_回收站清空了怎么恢复
  6. java 课程作业2
  7. 专升本英语6套学习笔记和三套模拟试卷
  8. 0903 无源滤波器;
  9. 向量在游戏开发中的应用(一)
  10. 怎么把网页变成灰色?怎么让头像或某一部分不变灰色?filter/backdrop-filter/mix-blend-mode/svg/grayscale(1)