JVM(7)之 从GC日志分析堆内存
在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。因此这章我们通过分析GC日志来一步步讲解如何细化设置堆内存。
首先我们来了解几个相关的参数:
- -XX:+PrintGCDetails:用于告诉虚拟机回收垃圾的时候顺便打印日志
- -Xloggc:路径 :将打印出来的日志信息保存至指定的路径
- -Xmn10M:设置新生代的内存大小
- -XX:SurvivorRatio=8:1调整Eden和Survivor的比例为8:1
我们还是用前面的代码例子来讲:
然后用参数-Xms20m -Xmx20m -Xmn10
-XX:+PrintGCDetails -Xloggc:d:\gc1.log启动。表示给堆分配20M,给新生代分配10M,打印GC日志,并将其输出至D盘的gc1.log文件中。运行后得到以下日志,这是第一部分:
现在我们来分析下每个部分代表的含义:
- 1)0.090:就是虚拟机从启动到现在经历的时间。
- 2)GC:指的是停顿类型(留着下一章讲)
- 3)PSYoungGen:发生GC的区域,这里指的是年轻代。根据收集器的种类而定。
- 4)7284K->1016K(9216K):该区域GC前当前区域所使用的容量–>该区域GC后已使用的容量(该区域的总容量),也就是新生代的容量。
- 5)7284K->6139K(19456K):整个堆GC前当前区域所使用的容量–>整个堆GC后已使用的容量(整个堆的总容量)。
- 6) 0.0078481:这次GC所占用的时间。
我们再来看看第二部分:
看图画红线部分,表示当前的堆中新生代可用内存的大小(一个eden和一个Survivor视为可用内存),红色框下面则是年老区的大小,加上一共是20m,符合我们所设置的。
红色框的部分则是新生代中eden区和两个Survivor区的大小,可以看出他们的比例是8:1,如果设置为-XX:SurvivorRatio=3的话,结果如下
到这里以上几个参数的作用以及分析就讲完啦,小伙伴们可以打开自己的工具试一试,感受一下。以后碰到了内存泄漏或者内存不足的话就可以直接查看日志来进行分析调优了!
JVM(7)之 从GC日志分析堆内存的更多相关文章
- JAVA 从GC日志分析堆内存 第七节
JAVA 从GC日志分析堆内存 第七节 在上一章中,我们只设置了整个堆的内存大小.但是我们知道,堆又分为了新生代,年老代.他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比 ...
- jvm的GC日志分析 [转]
jvm的GC日志分析 标签: jvm内存javagc 2015-06-22 16:37 1566人阅读 评论(1) 收藏 举报 分类: Java(4) JVM的GC日志的主要参数包括如下几个: ...
- 【转】gc日志分析工具
性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...
- GC之七--gc日志分析工具
性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析. Gc日志参数 通过在tomcat启动脚本中添加相关参数生成gc ...
- GC日志分析
JVM的GC日志的主要參数包含例如以下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的具体日志 -XX:+PrintGCTimeStamps 输出GC ...
- Android内存优化(二)DVM和ART的GC日志分析
相关文章 Android内存优化系列 Java虚拟机系列 前言 在Java虚拟机(三)垃圾标记算法与Java对象的生命周期这篇文章中,提到了Java虚拟机的GC日志.DVM和ART的GC日志与Java ...
- GC日志分析详解
点击返回上层目录 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 GC日志分析详解 以ParallelGC为例,YoungGC日志解释如下 ...
- JVM内存结构/JVM运行时数据区,以及堆内存的划分
1.程序计数器: 程序计数器是线程私有的内存,JVM多线程是通过线程轮流切换并分配处理器执行时间的方式实现的,当线程切换后需要恢复到正确的执 行位置(处理器)时,就是通过程序计数器来实现的.此内存区域 ...
- 记录一次JVM调优【GC日志的分析】
首先查看服务器版本默认信息: 修改tomcat/bin/catalina.sh,在最顶端加入JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -Xloggc ...
随机推荐
- php session之redis存储
前提:redis已安装好. php代码: <?php ini_set("session.save_handler", "redis"); ini_set( ...
- POJ-1390-Blocks (复杂区间DP)
$ POJ~1390~~Blocks: $ (很难想的区间DP) $ solution: $ 很好的一道题目.看起来似乎很简单,当时一直认为可以用二维区间DP来完成,转移 $ n^3 $ . 后来发现 ...
- k8s+jenkins
1 server 的port , targetport, nodeport的区别 targetport为容器的暴露端口,为最后端的端口 port可以理解为pod的端口,pod是容器的外层,该端口可以在 ...
- linux下命令行执行Python程序提示no moudle,路径问题
在ide中执行python程序,已经设置好项目路径中. 但是在cmd中执行程序,所在路径是python的搜索路径,如果涉及到import引用就会报类似ImportError: No module na ...
- 如何在mac上使用iMessage发送信息
在Mac上你也可以像iPhone上一样使用iMessage 来发送iMessage 与 普通的短信息. 并且你需要在iPhone上设置中的信息的信息转发中激活对电脑的支持.此时, 你的电脑也可以向你的 ...
- with上下文管理协议
with open('data.txt', 'r') as f: lines = f.readlines() for line in lines: print(line.split()) 类上面这段代 ...
- Dubbo学习-7-dubbo配置文件优先级
Dubbo配置加载流程 根据驱动方式的不同(比如Spring或裸API编程)配置形式上肯定会有所差异,具体参考XML配置.Annotation配置.API配置三篇文档.除了外围驱动方式上的差异,Dub ...
- WEB前端开发的思考与感悟
当我想要认真写一篇文章向大家分享我对前端的认识与感悟的时候,突然就深刻的体会到了这句话确实太有道理了. 最近几年对于web前端的传闻很多,比如人才稀缺,简单易学,待遇丰厚,整体势头发展良好等等.遇到过 ...
- [转]Html.DropDownList()的用法 ( Asp.Net MVC)
Html.DropDownList()赋默认值: 页面代码如下: <% List<SelectListItem> list = new List<SelectListItem& ...
- IDEA设置Ctrl+滚轮调整字体大小(转载)
按Ctrl+Shift+A,出现搜索框 输入mouse: 点击打开这个设置:勾选 点击ok,之后就可以通过Ctrl+滚轮 调整字体大小了. 转载自:http://www.cnblogs.com/LUA ...
