JVM参数解析 Xmx、Xms、Xmn、NewRatio、SurvivorRatio、PermSize、PrintGC「建议收藏」

-verbose:gc-XX:+printGC可以打印GC的简要信息[GC4790K->374K(15872K),0.0001606secs][GC4790K->374K(15872K),0.0001474secs][GC4790K->374K(15872K),0.0001563secs][GC4790K->374K(15872K),0.0…

大家好,又见面了,我是你们的朋友全栈君。

JVM知识专栏JVM-火种,持续更新,喜欢请关注?

堆的分配参数

-Xmx
指定最大堆,即堆内存的上线,当实际内存接近上线时会发生GC。
–Xms
最小堆,jvm运行的默认堆大小。
-Xmn
设置新生代大小
-XX:NewRatio
新生代(eden+2*s)和老年代(不包含永久区)的比值。新生代和老年代默认比例是1:2。
4表示 新生代:老年代=1:4,即年轻代占堆的1/5
-XX:SurvivorRatio
设置两个Survivor区和eden的比
8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10。eden和两个survivor的默认比例是8:1:1
-XX:+HeapDumpOnOutOfMemoryError
发生OutOfMemory是导出堆信息到文件
-XX:+HeapDumpPath
指定导出堆信息路径
-XX:OnOutOfMemoryError
在OOM时,执行一个脚本
下面的命令表示在发生oom时把堆日志存储到/tmp/heapdump.hprof,并且执行sh ~/test.sh命令

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:OnOutOfMemoryError="sh ~/test.sh"

永久区分配参数

-XX:PermSize
设置永久区的初始空间
-XX:MaxPermSize
设置永久区最大空间

栈大小分配

-Xss
栈内存容量,通常只有几百k,默认的栈内存为1MB。栈总空间=线程数量*栈容量,所以降低栈内存容量可以加大线程数。当程序请求的栈深度大于虚拟机栈深度的最大限度时会发生栈溢出,一般栈溢出是因为递归调用产生的,递归调用即函数自己调用自己,或者通过其他函数间接调用自己。

大对象直接进入老年代

-XX:PretenureSizeThreshold=1024
对象如果大于或等于此值,会直接分配到老年代里

打印简要GC回收数据

-verbose:gc
-XX:+PrintGC

[GC 66048K->11268K(251904K), 0.0210029 secs] 

这个参数是在每次发生GC时打印相关信息,[GC 66048K->11268K(251904K), 0.0210029 secs] ,这一行内容表示发生GC前占用堆66048K(约64.5mb),回收后内存为11268K(约11mb),整个堆大小为251904K(约246mb),回收花费了0.0210029 secs(约0.02秒)。

打印详细GC回收数据

-XX:+PrintGCDetails

[GC [PSYoungGen: 66048K->10746K(76800K)] 66048K->11353K(251904K), 0.0171900 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]

打印信息PSYoungGen中的PS是Parallel Scavenge收集器的缩写,属于垃圾收集器的一种。Parallel Scavenge收集器是一个使用复制算法并行多线程的新生代收集器。66048K为收集前的内存,10746K为收集后内存,76800K为整个新生代的默认大小。66048K为堆区在回收前的内存,11353K为堆区在回收后的内存大小,251904K是整个堆区的默认内存容量。0.0171900 secs为整个回收消耗时间,余额0.02秒。[Times: user=0.06(GC用户耗时) sys=0.00(GC系统耗时), real=0.01 secs(GC实际耗时)]
-XX:+PrintGCTimeStamps,作用和-XX:+PrintGCDetails相同,加了输出时间戳

指定GC log的位置,以文件输出

-Xloggc:F:\gc1.log
在这里插入图片描述
可以在文件中记录每次GC信息,方便排查定位问题。

每次一次GC后,都打印堆信息

-XX:+PrintHeapAtGC

{Heap before GC invocations=12 (full 0):
 PSYoungGen      total 133632K, used 94610K [0x00000000f5500000, 0x0000000100000000, 0x0000000100000000)
  eden space 92160K, 100% used [0x00000000f5500000,0x00000000faf00000,0x00000000faf00000)
  from space 41472K, 5% used [0x00000000faf00000,0x00000000fb164930,0x00000000fd780000)
  to   space 41472K, 0% used [0x00000000fd780000,0x00000000fd780000,0x0000000100000000)
 ParOldGen       total 175104K, used 65489K [0x00000000e0000000, 0x00000000eab00000, 0x00000000f5500000)
  object space 175104K, 37% used [0x00000000e0000000,0x00000000e3ff4460,0x00000000eab00000)
 PSPermGen       total 131072K, used 21516K [0x00000000d0000000, 0x00000000d8000000, 0x00000000e0000000)
  object space 131072K, 16% used [0x00000000d0000000,0x00000000d15031c8,0x00000000d8000000)

[GC [PSYoungGen: 94610K->2684K(127488K)] 160099K->68346K(302592K), 0.0052866 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

Heap after GC invocations=12 (full 0):
 PSYoungGen      total 127488K, used 2684K [0x00000000f5500000, 0x00000000ffc80000, 0x0000000100000000)
  eden space 89600K, 0% used [0x00000000f5500000,0x00000000f5500000,0x00000000fac80000)
  from space 37888K, 7% used [0x00000000fd780000,0x00000000fda1f190,0x00000000ffc80000)
  to   space 40960K, 0% used [0x00000000fac80000,0x00000000fac80000,0x00000000fd480000)
 ParOldGen       total 175104K, used 65662K [0x00000000e0000000, 0x00000000eab00000, 0x00000000f5500000)
  object space 175104K, 37% used [0x00000000e0000000,0x00000000e401f870,0x00000000eab00000)
 PSPermGen       total 131072K, used 21516K [0x00000000d0000000, 0x00000000d8000000, 0x00000000e0000000)
  object space 131072K, 16% used [0x00000000d0000000,0x00000000d15031c8,0x00000000d8000000)
}

这个参数会在每一次GC前后打印堆信息,上述内容为-XX:+PrintHeapAtGC加-XX:+PrintGCDetails打印出的结果。第一段落为GC发生前堆情况,第二段落为GC后的堆情况。 invocations=12 (full 0)表明这是第12次发生GC,其中full GC的次数为0。
PSYoungGen: GC前新生代总内存为133632K(约130mb),已使用为94610K (约92mb)。新生代的eden区使用了92160K(约90mb),使用率为100%。from区和to区为使用率分别为5%和0%。因为from区和to区使用复制回收算法,所以总会有一块内存作为备用内存而不被使用。GC后eden区占用为0%,说明eden的数据已经被回收或者已经发生了晋级。from区从5%的使用率升到了7%,说明有一部分新生代的数据晋级到了from区。
ParOldGen:老年代在GC前总内存为175104K(约171mb),实际占用65489K(约63mb)。而GC后的老年代为65662K(约64mb),说明GC过程中有一部分大对象越过form区直接晋级老年代了。
PSPermGen:永久区的内存情况在GC前后几乎没有发生变化。

监控类的加载

-XX:+TraceClassLoading

[Loaded org.apache.velocity.runtime.parser.VelocityCharStream from file:/velocity-1.6.4.jar]
[Loaded org.apache.velocity.runtime.parser.JJTParserState from file://velocity-1.6.4.jar]

这个方法可以将类加载的所有详细信息打印出来,方便确定虚拟机已经加载了哪些内容。

直方图展示类信息

-XX:+PrintClassHistogram
在这里插入图片描述
这个参数需要在tomcat运行时按下Ctrl+Break(thinkpad按Ctrl+fn+B打印),打印所有类的使用情况,排序为占用空间大小倒序。分别表示分别显示:序号、实例数量、总大小、类型,所以打印的第一条信息为序号53346个实例,占用内存7544632B。[C : char[]、[S: short[]、[I:int[]、[B:byte[] 、[I :int[]。constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass
与Classloader相关,常驻与Perm区。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128256.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 专题实验 日期类型

    专题实验 日期类型

    2021年8月30日
    45
  • 数据库与spring事务隔离级别不一致_spring事务传播行为

    数据库与spring事务隔离级别不一致_spring事务传播行为脏读:一个事务读取到另一个事务未提交的数据,出现脏读的本质是是因为操作(修改)完数据就立马释放掉锁,导致其他事务可以读取数据,而读取的数据是无用的或者错误的。不可重复读:一个事务读取到另外一个事务已经提交的数据,即一个事务可以看到其他事务所做的修改。幻读(虚读):一个事务内读取到了别的事务插入的数据,导致前后读取不一致。查看当前会话隔离级别:select@@tx_isolation;查看…

    2022年10月21日
    3
  • python的random()函数用法_Python随机函数random用法示例

    python的random()函数用法_Python随机函数random用法示例这篇文章主要为大家详细介绍了Python随机函数random用法示例,具有一定的参考价值,可以用来参考一下。对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!在python中用于生成随机数的模块是random,在使用前需要import,下面看下它的用法。random.randomrandom.random()用于生成一个0到1的随机符点数:0b,则生成的…

    2022年5月29日
    34
  • Vue 绑定使用 touchstart touchmove touchend[通俗易懂]

    Vue 绑定使用 touchstart touchmove touchend[通俗易懂]Vue简单绑定touchstarttouchmovetouchend

    2022年6月19日
    95
  • 解决IDEA中 XML文件屎黄色背景 的方法

    解决IDEA中 XML文件屎黄色背景 的方法介绍如何去除idea中.xml文件显示屎黄色背景的方法。不少资料用的是较旧版本中设置的路径,导致有些朋友来问为啥找不到修改设置的地方,所以在这里用下较新版本的idea作为演示。

    2022年10月10日
    2
  • SpringMVC @ResponseBody 415错误处理

    SpringMVC @ResponseBody 415错误处理闲话少说,刚开始用SpringMVC,页面要使用jquery的ajax请求Controller。但总是失败,主要表现为以下两个异常为:异常一:java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJacksonHttpMessageConverter异常二

    2022年6月10日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号