原创 

学习笔记之GC 日志 committed、reserved、used 含义及CMS流程(后篇)

分类:java    780人阅读    IT小君  2021-06-10 13:32

前篇:学习笔记之JVM OOM内存溢出模拟及JVM打印日志分析(环境win10)

浏览器请求 localhost:8888 会者curl localhost:8888,打印出如下日志

8MB                                                                                                                                                                                                                
Code Cache  committed:2555904  used:1713408                                                                                                                                                                        
Metaspace  committed:6553600  used:6251992                                                                                                                                                                         
Compressed Class Space  committed:786432  used:706192                                                                                                                                                              
Par Eden Space  committed:3407872  used:1106784                                                                                                                                                                    
Par Survivor Space  committed:393216  used:79352                                                                                                                                                                   
CMS Old Gen  committed:16777216  used:10016616                                                                                                                                                                     
[GC (CMS Initial Mark) [1 CMS-initial-mark: 9781K(16384K)] 10961K(20096K), 0.0024302 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]                                                                             
[CMS-concurrent-mark-start]                                                                                                                                                                                        
[CMS-concurrent-mark: 0.011/0.011 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]                                                                                                                                
[CMS-concurrent-preclean-start]                                                                                                                                                                                    
[CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]                                                                                                                            
[GC (CMS Final Remark) [YG occupancy: 1179 K (3712 K)][Rescan (parallel) , 0.0008601 secs][weak refs processing, 0.0005156 secs][class unloading, 0.0026372 secs][scrub symbol table, 0.0021037 secs][scrub string 
table, 0.0014837 secs][1 CMS-remark: 9781K(16384K)] 10961K(20096K), 0.0163186 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]                                                                                    
[CMS-concurrent-sweep-start]                                                                                                                                                                                       
[CMS-concurrent-sweep: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]                                                                                                                               
[CMS-concurrent-reset-start]                                                                                                                                                                                       
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]                                                                                                                               
9MB                                                                                                                                                                                                                
Code Cache  committed:2555904  used:1721792                                                                                                                                                                        
Metaspace  committed:6553600  used:6258120    

used ,capacity ,committed ,reserved 具体都代表什么?

  • used:加载的类的空间量。
  • capacity:当前分配块的元数据的空间。
  • committed:空间块的数量。
  • reserved:元数据的空间保留(但不一定提交)的量

示意图如下:


Metaspace由一个或多个虚拟空间组成,虚拟空间的分配单元是Chunk,其中Chunk使用列表进行维护。

当使用一个classLoader加载一个类时,过程如下:

1、当前classLoader是否有对应的Chunk且有足够的空间。

2、查找空闲列表中的有没有空闲的Chunk。

3、如果没有,就从当前虚拟空间中分配一个新的Chunk,这个时候会把对应的内存进行Commit,这个动作就是提交。

4、如果当前虚拟空间不足,则预留(reserves)一个新的虚拟空间。

reserved是jvm启动时根据参数和操作系统预留的内存大小。

committed是指那些被commit的Chunk大小之和;

capacity是指那些被实际分配的Chunk大小之和;

因为有GC的存在,有些Chunk的数据可能会被回收,那么这些Chunk属于committe的一部分,但不属于capacity

另外,这些被分配的Chunk,基本很难被100%用完,存在碎片内存的情况,这些Chunk实际被使用的内存之和即used的大小;

所以,如何一个服务中被代理的方法特别特别多,就可能存在创建特别特别多的classLoader对象,一个classLoader对象至少需要一个Chunk,这个Chunk可能只放一个class信息,那么就存在特别特别严重的内存碎片,继而就存在一个隐患,可能发生特别频繁的FGC,而且是由Metaspace不足引起的。


由以上日志可以打印出CMS的垃圾回收的过程

[GC (CMS Initial Mark) [1 CMS-initial-mark: 9781K(16384K)] ===>初始标记                                                      
[CMS-concurrent-mark-start]  ===>并发标记                                                                                                                                                                                
[CMS-concurrent-mark: 0.011/0.011 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]                                                                                                                                
[CMS-concurrent-preclean-start] ===>预清理                                                                                                                                                                                   
[CMS-concurrent-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]                                                                                                                            
[GC (CMS Final Remark) [YG occupancy: 1179 K (3712 K)][Rescan (parallel) ===> 最终标记               
[CMS-concurrent-sweep-start]  ===>交换                                                                                                                                                                                     
[CMS-concurrent-sweep: 0.002/0.002 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]                                                                                                                               
[CMS-concurrent-reset-start]  ===>重置                                                                                                                                                                                   
[CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]


点击广告,支持我们为你提供更好的服务

响应式时尚单品在线商城网站模板

HTML5数字产品服务公司网站模板

html5 canvas进度条圆环图表统计动画特效

响应式咖啡饮品宣传网站模板

css鼠标跟随文字模糊特效

HTML5 Canvas竖直流动线条背景动画特效

html5 canvas彩色碎片组合球形旋转动画特效

中小型创意设计服务公司网站模板

js+css3抽奖转盘旋转点餐代码

canvas炫酷鼠标移动文字粒子特效

html5图标下拉搜索框自动匹配代码

现代时尚家具公司网站模板

html5 svg夜空中星星流星动画场景特效

响应式太阳能能源公司网站模板

HTML5现代家居装潢公司网站模板

jQuery右端悬浮带返回顶部特效

网页设计开发公司网站模板

css+js实现的颜色渐变数字时钟动画特效

有机水果蔬菜HTML5网站模板

小众时尚单品在线电子商务网站模板

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务