首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

JVM进阶(七):从 GC 日志分析堆内存

  • 25-03-02 12:01
  • 3961
  • 6313
blog.csdn.net

文章目录

    • 一、前言
    • 二、示例讲解
    • 三、拓展阅读


一、前言

在前期博文中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。因此,这篇博文我们通过分析GC日志来一步步讲解如何细化设置堆内存。

首先我们来了解几个相关的参数:

  • -XX:+PrintGCDetails:用于告诉虚拟机回收垃圾的时候顺便打印日志;
  • -Xloggc:路径 :将打印出来的日志信息保存至指定的路径;
  • -Xmn10M:设置新生代的内存大小;
  • -XX:SurvivorRatio=8:1:调整Eden和Survivor的比例为8:1;

二、示例讲解

我们还是用前面的代码例子来讲:

public class Test {
	private static List<Test> list = new ArrayList<Tets>();
	public static void main(String[] args){
		while (true) {
			Test test = new Test();
			list.add(test);
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后用参数-Xms20m -Xmx20m -Xmn10
-XX:+PrintGCDetails -Xloggc:d:\gc1.log启动。表示给堆分配20M,给新生代分配10M,并打印GC日志,并将其输出至D盘的gc1.log文件中。运行后得到以下日志,这是第一部分:
这里写图片描述
现在我们来分析下每个部分代表的含义:

  • 0.090:就是虚拟机从启动到现在经历的时间(单位:s)。
  • GC:指的是停顿类型(留着下一章讲)
  • PSYoungGen:发生GC的区域,这里指的是年轻代。根据收集器的种类而定。
  • 7284K->1016K(9216K):该区域GC前当前区域所使用的容量–>该区域GC后已使用的容量(该区域的总容量),也就是新生代的容量。
  • 7284K->6139K(19456K):整个堆GC前当前区域所使用的容量–>整个堆GC后已使用的容量(整个堆的总容量)。
  • 0.0078481:这次GC所占用的时间(单位:s)。

我们再来看看第二部分:
这里写图片描述
看图画红线部分,表示当前的堆中新生代可用内存的大小(一个eden和一个Survivor视为可用内存),红色框下面则是年老区的大小,加上一共是20m,符合我们所设置的。

红色框中的部分则是新生代中eden区和两个Survivor区的大小,可以看出他们的比例是8:1,如果设置为-XX:SurvivorRatio=3的话,结果如下
这里写图片描述
到这里以上几个参数的作用以及分析就讲完啦,小伙伴们可以打开自己的工具试一试,感受一下。以后碰到了内存泄漏或者内存不足的话就可以直接查看日志来进行分析调优了!

三、拓展阅读

  • 《JVM虚拟机专栏》
    这里写图片描述
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树进阶任务Java问答148946 人正在系统学习中
注:本文转载自blog.csdn.net的No Silver Bullet的文章"http://blog.csdn.net/sunhuaqiang1/article/details/54646711"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top