JVM笔记九-GC收集器日志信息学习
在上一篇文章中,我们通过代码运行结果,查看到JVM的堆内存逻辑上分区是三部分,物理上分区是2部分,以及是新生代分区三部分,占比分布是8/1/1。而且我们还通过代码和堆JVM参数配置,制造出了OOM异常。下面我们就来分析GC回收器的日志信息。
先来看看,OOM后,GC详细日志信息:
新生区的伊甸园区GC日志分析
新生区的Eden区的GC,叫法:GC或者是YGC或者是MinorGC或者是轻GC
我们复制一条来分析:
[GC (Allocation Failure①) [PSYoungGen: 1877K②->472K③(2048K④)] 3697⑤K->2835K⑥(7680K⑦), 0.0010223⑧ secs] [Times: user=0.00⑨ sys=0.00⑩, real=0.00 secs]
分段说明:
- :GC的类型;
- :YongGC前新生代的内存占用量
- :YoungGC后新生代的内存占用量;
- :新生代总内存大小;
- :YoungGC前JVM堆内存占用量;
- :YoungGc后JVM堆内存使用量;
- :JVM堆内存总大小;
- :YoungGC耗时
- :YoungGC用户耗时;
- :YoungGC系统耗时
- :YoungGC实际耗时
年老代GC日志分析:
年老代GC的叫法:Full GC或者FGC或者MajorGC或者重GC
同样,我们拿出OOM之前的一条GC日志进行分析
[Full GC (Ergonomics①) [PSYoungGen②: 96K③->0K④ (2048K⑤)] [ParOldGen⑥: 5094K⑦->4007K⑧ (5632K⑨)] 5190K⑩->4007K十一 (7680K十二), [Metaspace十三: 3314K十四 ->3314K 十五(1056768K十六)], 0.0074234 secs十七] [Times: user=0.08十八 sys=0.01十九, real=0.01 secs二十]:
标志说明:
- :GC类型
- :Young区
- :GC前Young区内存占用
- :GC后Young区内存占用
- :Young区总大小
- :Old区
- :GC前Old区内存占用
- :GC后Old区内存占用
- :Old区总大小
- :GC前堆内存占用
- :GC后堆内存占用
- :JVM堆内存总大小
- :元空间区
- :GC前占用内存
- :GC后占用内存
- :元空间总大小
- :GC耗时
- :用户耗时
- :系统耗时
- :实际耗时
如下图:
接下来,我们继续学习的是JVM垃圾回收的四种算法了。欢迎大家和凯哥(凯哥Java:kaigejava)继续一起学习:引用计数算法、复制算法、标记清除、标记压缩这四种算法。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【干货】连肝7个晚上,总结了关于Java基础的16个问题!
说说进程和线程的区别? 进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。 由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小的能独立运行的基本单位,他是进程的一个实体,可以减少程序并发执行时的时间和空间开销,使得操作系统具有更好的并发性。 线程基本不拥有系统资源,只有一些运行时必不可少的资源,比如程序计数器、寄存器和栈,进程则占有堆、栈。 知道synchronized原理吗? synchronized是java提供的原子性内置锁,这种内置的并且使用者看不到的锁也被称为监视器锁,使用synchronized之后,会在编译之后在同步的代码块前后加上monitorenter和monitorexit字节码指令,他依赖操作系统底层互斥锁实现。他的作用主要就是实现原子性操作和解决共享变量的内存可见性问题。 执行monitorenter指令时会尝试获取对象锁,如果对象没有被锁定或者已经获得了锁,锁的计数器+1。此时其他竞争锁的线程则会进入等待队列中。 执行mon...
- 下一篇
CentOS 7.9(2009)最新版发布
Johnny Hughes宣布了CentOS 7.9的最新版2009,这并非CentOS的最新版,而是这一发行版的旧分支7.9升级后的当前版本,它是由Red Hat Enterprise Linux 7.9的源代码构建而成的。 作者介绍说: 我们很高兴地宣布针对x86_64架构的CentOS Linux 7(2009)的普遍可用。即日起,这是CentOS Linux 7的当前版本,标记为2009,源自Red Hat Enterprise Linux 7.9源代码。这个版本取代了之前发布的所有CentOS Linux 7的内容,因此我们强烈建议所有用户升级他们的机器。 请注意,旧的内容以及被相同应用的新版本所取代的内容,会从 Extras/ 和 Plus/ 等资源库中被去掉;这次我们也将此机制扩展到了 mirror.centos.org 托管的 SIG 内容,一些旧的 End of Life 内容也被删除。但曾经发布的所有内容,都会一直在库服务上提供给还在寻找和有实际需求的人。 访问更多信息: Release Announcement,Release MotesUpstream Rele...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果