四、理解GC日志、内存分配与回收策略

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 最前面的数字“33.125:”和“100.667”代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数GC日志开头的“[GC” "[FullGC"说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的,如果有“Full”,说明这次GC是发生了stop-the-world的。接下来“[DefNew”、"[Tenured" “[Perm”标识GC发生的区域,这里显示的区域名称与使用的GC收集器是密切相关的,例如上面样例所使用的Serial收集器中的新生代名为“Default New Generation”,所以显示为“DefNew”。如果是ParNew收
33.125[GC [DefNew3324K-152K3712K),0.0025925secs]3324K-152K11904K),0.0031680 secs]
 
100.667[FullGC [Tenured0K-210K10240K),0.0149142secs]4603K-210K19456K),[Perm2999K-2999K21248K]0.0150007 secs][Timesuser=0.01 sys=0.00real=0.02 secs]
AI 代码解读

最前面的数字“33.125:”和“100.667”代表了GC发生的时间,这个数字的含义是从Java虚拟机启动以来经过的秒数

GC日志开头的“[GC” "[FullGC"说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的,如果有“Full”,说明这次GC是发生了stop-the-world的。

接下来“[DefNew”、"[Tenured" “[Perm”标识GC发生的区域,这里显示的区域名称与使用的GC收集器是密切相关的,例如上面样例所使用的Serial收集器中的新生代名为“Default New Generation”,所以显示为“DefNew”。如果是ParNew收集器,新生代名称就会变为“[ParNew” 意为“Parallel New Generation”。如果采用Parallel Scavenge收集器,那它配套的新生代就叫做“PSYoungGen”,老年代和永久代同理,名称也是由收集器决定的。

后面方括号内部的“3324K ->152K(3712K)”含义是“GC前该内存区域已使用容量->GC后该内存区域已使用容量(该内存区域总容量)”,而在方括号外部的"3324K ->152K(11904K)",含义是“GC前Java堆已使用容量->GC后Java堆已使用容量(java堆总容量)”

再往后,“0.0025925 secs”表示该内存区域GC所占用的时间,单位是秒。

对象的内存分配,往大方向讲,就是在堆上分配

1、对象优先在Eden分配

大多数情况下,对象在新生代Eden区分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。

2、大对象直接进入老年代

所谓的大对象,是指需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串以及数组

3、长期存活的对象将进入老年代

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
4
分享
相关文章
JVM实战—7.如何模拟GC场景并阅读GC日志
本文主要介绍了:如何动手模拟出频繁Young GC的场景、JVM的Young GC日志应该怎么看、编写代码模拟动态年龄判定规则进入老年代、编写代码模拟S区放不下部分进入老年代、JVM的Full GC日志应该怎么看。
144 16
JVM实战—7.如何模拟GC场景并阅读GC日志
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
G1原理—7.G1的GC日志分析解读
本文进行了TLAB的GC日志解读、YGC的GC日志解读、模拟YGC(单次GC及多次GC的不同场景)、打开实验选项查看YGC的详情日志信息、Mixed GC日志信息之初始标记过程、Mixed GC日志信息之混合回收过程。
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
339 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
JVM进阶调优系列(8)如何手把手,逐行教她看懂GC日志?| IT男的专属浪漫
本文介绍了如何通过JVM参数打印GC日志,并通过示例代码展示了频繁YGC和FGC的场景。文章首先讲解了常见的GC日志参数,如`-XX:+PrintGCDetails`、`-XX:+PrintGCDateStamps`等,然后通过具体的JVM参数和代码示例,模拟了不同内存分配情况下的GC行为。最后,详细解析了GC日志的内容,帮助读者理解GC的执行过程和GC处理机制。
内存回收
【10月更文挑战第9天】
251 5
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
670 3
让星星⭐月亮告诉你,强软弱虚引用类型对象在内存足够和内存不足的情况下,面对System.gc()时,被回收情况如何?
本文介绍了Java中四种引用类型(强引用、软引用、弱引用、虚引用)的特点及行为,并通过示例代码展示了在内存充足和不足情况下这些引用类型的不同表现。文中提供了详细的测试方法和步骤,帮助理解不同引用类型在垃圾回收机制中的作用。测试环境为Eclipse + JDK1.8,需配置JVM运行参数以限制内存使用。
95 2
JVM进阶调优系列(3)堆内存的对象什么时候被回收?
堆对象的生命周期是咋样的?什么时候被回收,回收前又如何流转?具体又是被如何回收?今天重点讲对象GC,看完这篇就全都明白了。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问