每个小块,可能一会被定义成Eden区,一会被指定为Survivor区或者Old区。
这样内存上的管理:
依据这些垃圾的数量,就可以计算出那些小块现在垃圾比较多,就可以优先去处理垃圾比较多的。进而提高整个垃圾回收的效率。
G1GC会通过前面一段时间的运行情况来不断的调整自己的回收策略和行为,以此来比较稳定地控制暂停时间,在应用程序刚启动时,G1还没有采集到什么足够的信息,这时候就处于初始的fully-young模式,当年轻代空间用满后,应用线程会被暂停,年轻代内存块中的存活对象被拷贝到存货区。如果还没有存活区,则任意选择一部分空闲的内存块作为存活区。
拷贝的过程成为转移(Evacuation),这和前面介绍的其他年轻代收集器是一样的工作原理。
同时我们可以看到,G1GC的很多概念建立在CMS的基础上,所以下面的内容需要对CMS有一定的理解。
G1并发标记的过程与CMS基本上是一样的。G1的并发标记通过Snapshot-At-The-Beginning(起始快照)的方式,在标记阶段开始时记下所有的存活对象。即时在标记的同时又有一些变成了垃圾。通过对象的存活信息,可以构建出每个小堆块的存活状态,以便回收收集能高效地进行选择。
这些信息在接下来的阶段会用来执行老年代区域的垃圾收集。
有两种情况是可以完全并发执行的:
当堆内存的总体使用比例达到一定数值,就会触发并发标记。这个默认比例是45%,但也可以通过JVM参数InitiatingHeapOccupancyPercent来设置。和CMS一样,G1的并发标记也是由多个阶段组成,其中一些阶段是完全并发的,还有一些阶段则会暂停应用线程。
此阶段标记所有从GC根对象直接可达的对象。
此阶段标记所有从”根区域“可达的存活对象。根区域包括:非空的区域,以及在标记过程中不得不收集的区域。
此阶段和CMS的并发标记阶段非常类似:只遍历对象图,并在一个特殊的位图中标记能访问到的对象。
和CSM类似,这是一次STW停顿(因为不是并发的阶段),以完成标记过程。G1收集器会短暂地停止应用线程,停止并发更新信息的写入,处理其中的少量信息,并标记所有在并发标记开始时未被标记的存活对象。
阶段5:Cleanup(清理)
最后这个清理阶段为即将到来的转移阶段做准备,统计小堆块中所有存活的对象,并将小堆块进行排序,以提升GC的效率,维护并发标记的内部状态。所有不包括存活对象的小堆块在此阶段都被回收了。有一部分任务是并发的:例如空堆区的回收,还有大部分的存活率计算。此阶段也需要一个短暂的STW暂停。
并发标记完成之后,G1将完成一次混合收集(mixed collection),就是不只清理年轻代,还将一部分老年代区域也加入到回收集中。混合模式的转移暂停不一定紧跟并发标记阶段。有很多规则和历史数据会影响混合模式的启动时机。比如,假若在老年代中可以并发地腾出很多的小堆块,就没有了必要启动混合模式。
因此,在并发标记与混合转移暂停之间,很可能会存在多次young模式的转移暂停。
具体添加到回收集的老年代小堆块的大小及顺序,也是基于许多规则来判定的。其中包括指定的软实时性能指标,存活性,以及在并发标记期间收集的GC效率等数据,外加一些可配置的JVM选项。混合收集的过程,很大程度上和前面的fully-young gc是一样的。
G1启动标记周期,但在Mix GC之前,老年代就被填满,这时候G1会放弃标记周期。
没有足够的内存供存活对象或晋级对象使用,由此触发了Full GC(to-space exhausted/to-space overflow)。
补充:当G1GC做垃圾回收的时候,有很多对象需要从新生代晋升到老年代,晋升的时候发现没有足够的内存供这次晋升使用,这时候也会触发Full GC,然后进行GC退化。
补充:G1GC内部为了更有效的做GC,其实默认是保留一部分的内存的,用来做对象的复制。
当巨型对象找不到合适的空间进行分配时,就会启动Full GC,来释放空间。
文章浏览阅读483次。第一个阶段,开发环境和工具准备浏览器 (Google,FireFox,…)下载,安装前端开发工具vscode,下载、安装 node、npm、webpack、webpack-cli、cnpm,配置前端开发环境下载、配置PHP和MySQL第二个阶段,前端入门,网页制作1,HTML:常用标签(div标签,p标签,span标签,a标签,img标签)锚点列表标签(有序列表,无序列表,自定义列表)表单标签表格标签标签分类标签语义化注释字符实体2,CSS:CSS介绍全局_行内样式三目运算
文章浏览阅读6.2k次,点赞2次,收藏3次。1,参数没有写到 [mysqld] 下面而是写到 配置文件的末尾处了,我今天犯的错就是这个2,没有重启3,没有退出当前会话4,修改派配置文件错误5,参数写错了,打脸6,修改了错误的配置文件这里只说了修改 my.cnf,并没有说清楚其绝对路径是哪个文件。也就是说,有可能修改的不是正确路径下的my.cnf文件。在MySQL中,是允许存在多个 my.cnf 配置文件的,有的能对整个系统环境产生影响,例如:/etc/my.cnf。有的则只能影响个别用户,例如:~/.my.cnf。M._mysql 修改配置文件不生效
文章浏览阅读938次,点赞22次,收藏24次。Autowired注入是由AutowiredAnnotationBeanPostProcessor完成的。@Resource注入是由CommonAnnotationBeanPostProcessor完成的。由于两种方式代码重复率太高,原理基本一致,下面我们主要以AutowiredAnnotationBeanPostProcessor源码分析为主。AutowiredAnnotationBeanPostProcessor负责属性、方法的注入。_spring boot resource按类型注入
文章浏览阅读3w次,点赞15次,收藏110次。首先打开Qt Creator,然后点击菜单 ,文件->新建文件和项目,如图所示:左边选择Application,右边选择Qt Widgets Application,点击Choose...,项目名称为myOpenGLShow,接着下一步,一直默认,到Details,如下:点击取消选中创建界面(G)。然后下一步,知道完成,程序显示的为mainwindow.cpp文件:接着是利用QOpenGLW..._qt opgl绘制图片
文章浏览阅读66次。二维数组及滚动数组118. 杨辉三角难度简单给定一个非负整数 *numRows,*生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]]提示:1 <= numRows <= 30class Solution { //purpos
文章浏览阅读5.1w次,点赞13次,收藏37次。SYN_SENT是TCP连接的发起方第一次发给接受放的时候设置成的状态。可以通过netstat -ano查看其中 在"state" 中可能会有 SYN_SENT如果在"state"中出现大量的"SYN_SENT ",那么你很有可能中了蠕虫病毒.这类病毒为了感染别的计算机,它就要扫描别的计算机,在扫描的过程中对每个要扫描的计算机都要发出了同步请求,这也是出现许多SYN_S..._syn_sent
文章浏览阅读146次。1.粒子材质和粒子几何体 创建粒子系统的点,可以存放在Geometry几何体中。使用Geometry的vertices保存点、colors保存点的颜色。但我们必须使用粒子的专用材质对象PointCloudMaterial(原名叫做ParticleBasicMaterial)设置材质。包含的属性如下列表: 名称/描述 color/PointCloud对象中所有粒子的颜色..._具有粒子参考系的几何体仅支持粒子网格方法是什么意思
文章浏览阅读1.5k次。声明好好学习,天天向上漏洞描述Weblogic是美国Oracle公司出品的一个Application Server,确切的说是一个基于JavaEE架构的中间件,Weblogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。攻击者可利用该漏洞实现远程代码执行。该反序列化的gadget存在与coherence包中。编号CVE-2020-14645。反序列化的对象,通过t3发送给weblogic即可。所以,这个只是生成payload的工具。影响范围Ora_weblogic中如何打代码
文章浏览阅读3.1k次。一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个模块。问题来了:如何将模块组合并成一个完整系统?还有,我们开发的软件需要不断升级,如何升级?难道每次非得把整个工程重新编译一次再发布给用户吗?解决这些问题的科学办法,就是开发动态链接库DLL。现在_bcb可以隐式调用动态库吗
文章浏览阅读2.8k次,点赞2次,收藏22次。背景:通过qt creator来编写,编译,运行ros程序包。ros程序包也可以带有界面。其工程是一个ros工程(不是.pro,而是cmakelist.txt),使用cmake编译方式。步骤:(1)安装QT(最新版本):见 https://blog.csdn.net/ipfpm/article/details/80698659(2)设置快捷方式:这一步将要修改Qt Creato..._qt如何打开ros项目
文章浏览阅读3k次。高并发 高负载 网站系统架构注:我看到这篇文章写的太好了,可以没法转到CSDN上我就COPY了,看到下面激烈的评论,我也一并COPY了。不过还是要谢谢哪位作者了。这样的文章很少。 转自:http://www.toplee.com/blog/71.html我在CERNET做过拨号接入平台的搭建,而后在Yahoo&3721从事过搜索引擎前端开发,_priceline数据库架构
文章浏览阅读5.3k次,点赞2次,收藏11次。从桌面到移动:异构计算翻天覆地的技术变革http://www.csdn.net/article/2014-07-10/2820610-heterogeneous-computing-in-mobile/1_异构计算系统的优点