G1垃圾回收器

 G1垃圾回收器

概述

1.Young Collection(年轻代垃圾回收)

说明:下图中 e代表eden区(伊甸园),s代表幸存者区,o代表老年代

初始时,所有区域都处于空闲状态

创建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象

G1会对eden区占比进行限制,比如说当eden区占百分之五的时候,触发垃圾回收。当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象到幸存者区,其他区域的空间就会被释放,标记和释放的时候都需要暂停用户线程(stw)。

随着时间流逝,伊甸园的内存又有不足

将伊甸园以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代

2.Concurrent Mark (并发标记)

        当老年代占用内存超过阈值(默认是45%)后,触发并发标记,标记老年代中存活的对象,这时无需暂停用户线程

        并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程(由于之前已经标记过一次,因此此时就算要暂停所有线程,时间也非常短,不会影响用户体验)。

        这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。此时不会对所有老年代区域进行回收,因为如果一次回收所有的老年代垃圾,会导致暂停时间太长。这里我们可以设置一个预期暂停时间,比如暂停时间不超过多少毫秒。因此为了不超过预期暂停时间,不是一次把所有老年代垃圾回收。而是根据暂停时间目标优先回收价值高 (存活对象比例较少)的区域(这也是 Gabage First 名称的由来)。

3.Mixed Collection (混合垃圾回收)

        由于并发标记阶段已经把要回收的老年代垃圾标记出来了。在此阶段,某些回收价值高的区域会和eden区、幸存者区的垃圾一起被回收。

        eden区和幸存者区还是存活对象还是会被复制到新的幸存者区,幸存者区中存活较久的对象、某些回收价值高的老年区中存活的对象,会被复制到新的老年区。

注意:混合垃圾回收可能要执行多次,才能把内存释放到阈值以下。

复制完成,内存得到释放。进入下一轮的新生代回收、并发标记、混合收集

注:其中H叫做巨型对象,如果对象非常大,会开辟一块连续的空间存储巨型对象

如果我们垃圾回收的速度小于分配新对象的速度,就会出现并发失败,会触发一次Full GC,暂停时间较久(出现概率很低)。

小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/560086.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构学习--环形链表

环形链表 我们在判断一个链表是否是环形的,即首尾相连,我们可以以使用快慢指针,如果快指针能再次追上慢指针,就说明该链表是环形的,这边可以举个操场跑步的例子,当操场是环形的,跑的快的&#…

Docker Compose 的安装和使用详解

Docker Compose 是 Docker 官方开源的容器编排(Orchestration)项目之一,用于快速部署分布式应用。本文将介绍 Docker Compose 的基本概念、安装流程及使用方法。 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,Docker C…

交换基础配置--单臂路由

1、创建vlan 创建vlan10 创建vlan10和vlan20 创建vlan1到vlan9 vlan1可以不用创建,因为交换机的所有接口默认为vlan1 本实验只需要vlan10和vlan20,以上只是介绍创建vlan的方法。 查看创建的vlan: sw2同理。接着将需要划分vlan的接口划入…

【java】29:IO流

文件: 1 什么是文件: 文件,对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文档,txt文件,excel文件.….都是文件。它既可以保存一张图片,也可以保持视频,声音.. .2 文…

开源Windows12网页版HTML源码

源码介绍 开源Windows12网页版HTML源码,无需安装就能用的Win12网页版来了Windows12概念版(PoweredbyPowerPoint)后深受启发,于是通过使用HTML、CSS、js等技术做了这样一个模拟板的Windows12系统,并已发布至github进行…

jvm-接口调用排查

问题描述 线上碰到个问题,某个接口调用时间特别长,线上调用接口直接报gateway time out 分析处理 1、先关闭该功能 (该功能是非核心功能) 2、本地起服务连环境排查,发现本地正常。并且线上其他接口正常,…

回归预测 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SA-BP模拟退火算法优化BP神经网络多变量回归预测&#xff0…

Ansible初识以及安装

1. Ansible应用简述: Ansible基于python语言实现,由Paramiko和PyYAML两个关键模块构建。具有独特的设计理念: 1)安装部署简单 2)管理主机便捷,支持多主机并行管理 3)避免在被管理主机上安装客户…

【GitBlit】Windows搭建Git服务器详细教程

前言 如果公司或个人想在 Windows 环境下搭建私有的 Git 服务器,那么这个开源的 GitBlit 是一个不错的选择。 Gitblit 是一个开源纯 Java 的用于管理、查看和服务 Git 存储库。它是一个小型的托管集中式存储库工具。支持 SSH、HTTP 和 GIT 协议,开箱即…

通过PyCharm平台开发Django应用程序

学会使用命令行工具开发Django应用程序是基础,不过更多的时候还是要借助平台开发工具。目前,最好的Django应用程序开发工具就是jetBrains公司推出的PyCharm平台了。 借助PyCharm开发平台,可以极大提高开发Django应用程序的效率,同…

静态成员与友元,内部类初识

一.静态成员 1.静态成员变量 (1)定义: 类的定义中以静态声明的变量 (2)写法: static 变量声明 (3)注意: 静态成员变量不在对象中,在静态区&#xff0c…

从OWASP API Security TOP 10谈API安全

1.前言 应用程序编程接口(API)是当今应用驱动世界创新的一个基本元素。从银行、零售、运输到物联网、 自动驾驶汽车、智慧城市,API 是现代移动、SaaS 和 web 应用程序的重要组成部分,可以在面向客 户、面向合作伙伴和内部的应用程…

Xinstall:实现注册后自动绑定,提升用户体验

在移动互联网时代,App的注册与绑定流程对于用户体验至关重要。繁琐的注册步骤和手动绑定操作往往会让用户望而却步,导致用户流失。为了解决这一问题,Xinstall品牌推出了注册后自动绑定功能,极大提升了用户体验。 Xinstall的自动…

手写Java设计模式之抽象工厂模式,附源码解读

接上篇,抽象工厂模式将汽车的一些属性可以抽象出来,可以理解为给不同汽车品牌生成时加上不同的特性,如颜色等,具体代码如下: 引入颜色接口: public interface Colour {void fill(); }将颜色与汽车生成品牌…

线性代数基础2矩阵

矩阵是什么 矩阵就是二维数组,下面是一个 m 乘 n 的矩阵,它有 m 行,n 列,每行每列上面都有元素,每个元素都有行标i 和列标 j, a ij 。简称m n矩阵,记作: 注意a11的索引是 A[0,0]。…

Redis入门到通关之数据结构解析-RedisObject

文章目录 ☃️概述☃️源码 ☃️概述 RedisObject 是 Redis 中表示数据对象的结构体,它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中,所有的数据都被存储为 RedisObject 类型的对象。 RedisObject 结构体定义如下(简化版本&#xf…

网络流问题详解

1. 网络最大流 1.1 容量网络和网络最大流 1.1.1 容量网络 设 G(V, E)是一个有向网络,在 V 中指定了一个顶点,称为源点(记为 Vs),以及另一个顶点,称为汇点(记为 Vt);对…

【ds】替换空格

用‘%20’替换空格 var replaceBlank (charArr)> {if (!charArr || charArr.length 0) return var len charArr.lengthlet spaceLen 0for (let i 0; i < len; i) {if (charArr[i] ) {spaceLen}}var extraLen spaceLen * 2 // -> 20% 每一个空格需要增加2个ch…

大型网站系统架构演化实例_4.数据库读写分离

1.数据库读写分离 网站在使用缓存后&#xff0c;使对大部分数据读操作访问都可以不通过数据库就能完成&#xff0c;但是仍有一部分操作&#xff08;缓存访问不命中、缓存过期&#xff09;和全部的写操作都需要访问数据库&#xff0c;在网站的用户达到一定规模后&#x…

Python-VBA函数之旅-getattr函数

目录 一、getattr函数的常见应用场景&#xff1a; 二、getattr函数使用注意事项&#xff1a; 1、getattr函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;https://blog.csdn.net/ygb_1024?spm1010.21…