文档章节

JVM相关博文,jvm堆内存,堆外内存

weiliu007
 weiliu007
发布于 2016/08/25 19:35
字数 959
阅读 46
收藏 0
  1. 使用GC日志命令行选项为:

    -XX:+PrintGCTimeStamps

    -XX:+PrintGCDetails

    -Xloggc:<filename>

  2. JVM 【-server】

    glassfish应用服务器  -server 启动 垃圾收集器默认组合方式为

    新生代:Parallel Scavenge 并行回收GC

    年老代和持久代:Parallel Old并行GC

  3. GC日志打印信息

    -XX:+PrintGCTimeStamps输出格式:

    289.556: [GC [PSYoungGen: 314113K->15937K(300928K)] 405513K->107901K(407680K), 0.0178568 secs] [Times: user=0.06 sys=0.00, real=0.01 secs] 

    293.271: [GC [PSYoungGen: 300865K->6577K(310720K)] 392829K->108873K(417472K), 0.0176464 secs] [Times: user=0.06 sys=0.00, real=0.01 secs] 

    详解:

    293.271是从jvm启动直到垃圾收集发生所经历的时间,GC表示这是一次Minor GC(新生代垃圾收集);[PSYoungGen: 300865K->6577K(310720K)] 提供了新生代空间的信息,PSYoungGen,表示新生代使用的是多线程垃圾收集器Parallel Scavenge。300865K表示垃圾收集之前新生代占用空间,6577K表示垃圾收集之后新生代的空间。新生代又细分为一个Eden区和两个Survivor区,Minor GC之后Eden区为空,6577K就是Survivor占用的空间。

    括号里的310720K表示整个年轻代的大小。

    392829K->108873K(417472K),表示垃圾收集之前(392829K)与之后(108873K)Java堆的大小(总堆417472K,堆大小包括新生代和年老代)

    由新生代和Java堆占用大小可以算出年老代占用空间,如,Java堆大小417472K,新生代大小310720K那么年老代占用空间是417472K-310720K=106752k;垃圾收集之前老年代占用的空间为392829K-300865K=91964k 垃圾收集之后老年代占用空间108873K-6577K=102296k.

    0.0176464 secs表示垃圾收集过程所消耗的时间。

     [Times: user=0.06 sys=0.00, real=0.01 secs] 提供cpu使用及时间消耗,user是用户模式垃圾收集消耗的cpu时间,实例中垃圾收集器消耗了0.06秒用户态cpu时间,sys是消耗系统态cpu时间,real是指垃圾收集器消耗的实际时间。

  4. -XX:+PrintGCDetails输出格式:

    293.289: [Full GC [PSYoungGen: 6577K->0K(310720K)] 

    [PSOldGen: 102295K->102198K(134208K)] 108873K->102198K(444928K) 

    [PSPermGen: 59082K->58479K(104192K)], 0.3332354 secs] 

    [Times: user=0.33 sys=0.00, real=0.33 secs] 

    说明:

    Full GC表示执行全局垃圾回收

    [PSYoungGen: 6577K->0K(310720K)] 提供新生代空间信息,解释同上

    [PSOldGen: 102295K->102198K(134208K)]提供了年老代空间信息;

    108873K->102198K(444928K)整个堆空间信息;

    [PSPermGen: 59082K->58479K(104192K)]提供了持久代空间信息;

  5. JVM【-client】

    glassfish应用服务器 默认 -client启动 垃圾收集器默认组合方式为

    新生代:Serial串行GC  (新生代使用-XX:+UseSerialGC收集器)

    年老代和持久代:Serial Old 串行GC

  6. GC日志打印信息:

     

    -XX:+PrintGCTimeStamps输出格式:

    9.007: [GC 9.007: [DefNew: 13526K->1060K(14400K), 0.0041350 secs] 44692K->32226K(46108K), 0.0041767 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

    9.259: [GC 9.259: [DefNew: 13924K->1089K(14400K), 0.0042760 secs] 45090K->32650K(46108K), 0.0043143 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 

    说明:

    DefNew表示新生代使用Serial串行GC垃圾收集器,defNew提供新生代空间信息;

    DefNewGeneration 就是 default new generation

  7. -XX:+PrintGCDetails输出格式:

    9.348: [GC 9.348: [DefNew: 13953K->976K(14400K), 0.0040943 secs]9.352: [Tenured: 32163K->32220K(32220K), 0.1182207 secs] 45514K->32338K(46620K), [Perm : 30467K->30467K(65536K)], 0.1224318 secs] [Times: user=0.12 sys=0.00, real=0.13 secs] 

    DefNew:表示新生代使用Serial串行GC垃圾收集器,defNew提供新生代空间信息;

    Tenured:提供年老代空间信息;

    45514K->32338K(46620K):整个堆空间大小信息;

    Perm :提供持久代空间信息;

-Xloggc:$CATALINA_BASE/logs/gc.log

参考博文:

JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释 

JVM初探- 使用堆外内存减少Full GC

Java堆外内存的使用好处

Tomcat中Java垃圾收集调优

Java虚拟机垃圾收集器分析 并行和并发

G1 垃圾收集器入门

深入理解Java G1垃圾收集器

触发JVM进行Full GC的情况及应对策略

Major GC和Full GC的区别是什么?触发条件呢?

© 著作权归作者所有

上一篇: 性能细节1
下一篇: TopN算法与排行榜
weiliu007
粉丝 16
博文 171
码字总数 84810
作品 0
深圳
程序员
私信 提问
My java——JVM(内存域)三

续 My java——JVM(内存)二 写了一点JVM内存的一些操作的方法,和引出内存的分类。 是呀,java内存是我们在java编程中很少考虑到的,也没用真正的管理过。也许都知道JVM有自己的垃圾回收机...

tngou
2013/03/18
266
1
堆外内存及其在 RxCache 中的使用

RxCache RxCache 是一款支持 Java 和 Android 的 Local Cache 。目前,支持堆内存、堆外内存(off-heap memory)、磁盘缓存。 github地址:https://github.com/fengzhizi715/RxCache 堆外内存(...

fengzhizi715
01/13
0
0
《成神之路-基础篇》JVM——JVM内存结构(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是《成神之路系列文章》的第一篇,主要是关于JVM的一些介绍。 持续更新中 参考文章: Java虚拟机的内存组成以及堆内存介绍 Java堆和栈...

2018/05/05
0
0
深入浅出JVM内存模型与JVM参数详细配置

JVM内存结构 由上图可以清楚的看到 JVM的内存空间分为3大部分: 堆内存 方法区 栈内存 其中 栈内存 可以再细分为 java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代, 新生代中还可以...

小刀爱编程
2018/11/01
69
0
Java线上应用故障排查之二:高内存占用

前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。 搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang...

Kerry_Han
2014/10/27
350
0

没有更多内容

加载失败,请刷新页面

加载更多

spring源码分析6: ApplicationContext的初始化与BeanDefinition的搜集入库

先前几篇都是概念的讲解:回顾下 BeanDefinition 是物料 Bean是成品 BeanFactory是仓库,存储物料与成品 ApplicationContext初始化搜集物料入库,触发生产线,取出物料生产Bean 本文研究spr...

星星之焱
21分钟前
5
0
彻底解决tomcat乱码问题

本地项目请求访问,浏览器中文输出没问题。 部署到服务器上面之后,返回到浏览器的中文就乱码了。 尝试办法: 1.修改tomcat下的conf中的service.xml中的配置信息: 重新启动后,没有效果还是...

诗书易经
37分钟前
5
0
Java开发需要掌握的IDEA插件大全

1、Lombok 解释:这是最基本的插件,2017年就火了,还没用的百度一下吧。 博客链接:Intellij IDEA 安装lombok及使用详解 2、PlantUML integration 解释:各种类之间的关联图,高级开发必备。...

木九天
37分钟前
6
0
python学习10.05:Python range()快速初始化数字列表

实际场景中,经常需要存储一组数字。例如在游戏中,需要跟踪每个角色的位置,还可能需要跟踪玩家的几个最高得分。在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和纬度...

太空堡垒185
44分钟前
4
0
java单元测试,PowerMockito模拟方法内new对象

在做单元测试中有时候需要对方法内new出来的对象进行隔离,这是我们需要使用PowerMockito。 添加依赖 <dependency> <groupId>org.powermock</groupId> <artifactId>......

如梦之猿
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部