1. 标记清除算法

标记清除算法的优点在于速度足够快。但是缺点在于,对部分空间进行清除之后,这一整块的存储空间不连续,所以在这很容易造成内存碎片这种情况。

示意图如下:


2. 标记整理算法

标记整理算法和前面的标记清除算法的区别在于多了一个步骤,这里会把内存空间进行整理,也就是说,在清除部分内存之后,会将内存往前移动,该算法的优点在于不会导致内存碎片,但是这种算法的速度比较慢。

示意图如下:


3. 复制算法

复制算法:有两个内存空间,将第一个内存空间当中需要的内存区间进行复制到另一块的内存空间当中,到最后再将第二快的内存再一次返回给第一个内存空间当中。

复制算法的优点是不会有内存碎片,但缺点是需要占用双倍内存空间

示意图如下:


4. 分代垃圾回收

示意图如下:


步骤如下:

  • 对象首先分配在伊甸园区域
  • 新生代空间不足时,触发 minor gc,伊甸园和 幸存区from 存活的对象使用 copy 复制到 幸存区to 中,存活的对象年龄加 1并且交换 幸存区from 和 幸存区to
  • minor gc 会引发 stop the world,暂停其它用户的线程,等垃圾回收结束(防止复制的时候变量的地址改变导致程序混乱),用户线程才恢复运行
  • 当对象寿命超过阈值时,会晋升至老年代,最大寿命是15(4bit)
  • 当老年代空间不足,会先尝试触发 minor gc,如果之后空间仍不足,那么触发 full gc,STW的时间更长

5. 相关VM参数


6. GC 分析

使用以下代码段进行测试:给其划分内存空间。

    private static final int _512KB = 512 * 1024;private static final int _1MB = 1024 * 1024;private static final int _6MB = 6 * 1024 * 1024;private static final int _7MB = 7 * 1024 * 1024;private static final int _8MB = 8 * 1024 * 1024;

添加JVM的参数,运行代码查看输出 -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc -XX:-ScavengeBeforeFullGC


我们使用一个list数组,加入一个内存空间进去。使用代码段:

      ArrayList<byte[]> list = new ArrayList<>();list.add(new byte[_7MB]);

在前面设置了内存大小,在这内存不够,触发了垃圾回收机制,并且还可以看到伊甸园、幸存区 from 和幸存区 to 所占空间比例。


再往里面进行添加,是内存占用增大,再次查看伊甸园和幸存区 from 和幸存区 to 的所占比例,在这里伊甸园的空间基本上就已经占满了,


我们再添加一个512kb 进如这个list集合当中,可以发现这个时候新生代当中的数据对象会直接晋升到老年代当中。


以及当分配内存的时候,发现新生代当中的内存不够,而老年代当中的内存足够的时候,会直接晋升为老年代,以8m数据内存大小为例


当添加内存的时候,在新生代和老年代的内存都不够进行分配的时候就会抛出异常,也就是堆内存溢出。以添加两个8m的数据内存为例


但是当这段代码运行在线程当中,当内存不足的时候会不会影响到主线程直接结束,很显然是不会导致主线程结束,使用以下代码段进行测试

       new Thread(() -> {ArrayList<byte[]> list = new ArrayList<>();list.add(new byte[_8MB]);list.add(new byte[_8MB]);}).start();System.out.println("sleep....");Thread.sleep(1000L);

JVM垃圾回收(二) 垃圾回收算法相关推荐

  1. JVM调优(二)垃圾回收算法

    原文出处: pengjiaheng 可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一 ...

  2. JVM调优理论篇_二、常用垃圾回收器(JVM10种垃圾回收器)以及垃圾回收算法

    JVM调优理论篇_二.常用垃圾回收器以及垃圾回收算法 前言 一.垃圾回收基础 1.什么场景下使用垃圾回收 2.垃圾回收发生在哪个区域? 3.对象在什么情况下会被回收?(如何判断一个对象是否该被回收) ...

  3. JVM学习笔记(二):垃圾回收、垃圾回收算法、垃圾回收器(Serial、Parallel、CMC、G1)、内存分配原则实战

    垃圾回收 一.判断对象是否可以被回收 1.引用计数计数法 内容:在对象中添加一个引用计数器,每当有一个地方引用它,计数器就加一:当引用失效时,计数器就减一:任何时刻计数器为零的对象都是不可能在被使用的 ...

  4. JVM学习笔记之-拉圾回收概述,垃圾回收相关算法

    拉圾回收概述 什么是垃圾 垃圾收集,不是Java语言的伴生产物.早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生. 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什么时候 ...

  5. 22-09-02 西安 JVM 类加载器、栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法、对象的finalize机制

    这篇文章不少地方都截图了宋红康老师的课件,实在他jvm这块讲的真好.连接地址如下: 尚硅谷宋红康JVM全套教程(详解java虚拟机)_哔哩哔哩_bilibili JVM入门 1.JVM结构图 JVM是 ...

  6. 【JVM进阶之路】垃圾回收机制和GC算法之三色标记(三)

    JVM往期文章 [JVM进阶之路]内存结构(一) [JVM进阶之路]玩转JVM中的对象(二) 上篇文章中讲到JVM中的对象以及判断对象的存活,那么对于"已死"的对象应该如何处理,怎 ...

  7. 一文弄懂JVM内存结构,垃圾回收器和垃圾回收算法

    声明:本文从知乎上部分热门文章做二次整理,希望可以帮助更多的人,如有侵权,请联系删除. jvm 概述: jvm: java virtual machine, 用于把我们写的那些不能直接被程序识别的ja ...

  8. JVM -- 垃圾回收;垃圾回收算法(三)

    阅读前可参考 https://blog.csdn.net/MinggeQingchun/article/details/126947384 https://blog.csdn.net/MinggeQi ...

  9. JVM—7—垃圾回收概述及相关算法

    文章目录 一.垃圾回收概述 1.概念 2.什么是垃圾 2.1 什么是垃圾? 2.2 磁盘碎片整理 2.3 大厂面试题 3.为什么需要GC 4.早期垃圾回收 5.Java垃圾回收机制 5.1 优点 5. ...

  10. JVM虚拟机(四):JVM 垃圾回收机制概念及其算法

    垃圾回收概念和其算法 谈到垃圾回收(Garbage Collection)GC,需要先澄清什么是垃圾,类比日常生活中的垃圾,我们会把他们丢入垃圾箱,然后倒掉.GC中的垃圾,特指存于内存中.不会再被使用 ...

最新文章

  1. jquery拼接后css样式不生效_JQuery常用选择器以及操作属性和样式的方法介绍
  2. 【原创】MVC+ZTree实现权限树的功能
  3. P3957-跳房子【单调队列,dp,二分】
  4. 【Java】jstack报错Unable to open socket file: target process not responding or HotSpot VM not loaded
  5. 阿里云 wdcp面板后台控制安装
  6. 浅谈ES6中的rest参数
  7. java 中文数字排序_java 中文数字排序方法
  8. C++ 什么是句柄?为什么会有句柄?HANDLE
  9. 学堂在线笔记——前端与后台的故事——SQL语言及其编程
  10. [Linux]FloppyLinux--中国石油大学(华东)计算机操作系统课程设计作业教程
  11. 中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”?(考虑中间有几个闰年)
  12. SEM竞价员一天的工作流程了解一下?
  13. 谈谈我的技术专家之路
  14. 直播界很火的无线领夹麦克风快充方案 Type-C接口 PD快充+无线麦克风可同时进行
  15. 使用qq邮箱进行服务器邮件代发
  16. 数据中心对洪水风险应具备应急措施
  17. java实现生成纯色图片代码实例
  18. 增长黑客AB-Testing系统设计
  19. Level Set Evolution Without Re-initialization: A New Variational Formulation
  20. 菜鸟学习Spring——第一个例子

热门文章

  1. Eclipse 输入的汉字都变成了繁体
  2. 硬盘更换电脑后开机解决办法
  3. 创建一个8*8的国际象棋棋盘(黑块为0,白块为1)
  4. VsCode同步配置到另一台设备
  5. 小红书的文案有什么特点
  6. 华为煤矿军团首登央视 | 发布会金句爆棚
  7. 超炫的html5擦除效果,超炫html5效果代码(需浏览器支持)
  8. Redis数据库的使用
  9. 世界港航人工智能领军企业CIMCAI成熟AI产品全球前三船公司及港口落地,智能港口码头海关智能铁路场站智能航运船公司堆场提效降本
  10. Resco MobileForms Toolkit 2010的破解