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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信小程序—图片色彩分析(拾取图片的配色方案)「建议收藏」

    微信小程序—图片色彩分析(拾取图片的配色方案)「建议收藏」这是一款图分析图片配色方案demo,图片色彩分析或许可以应用在智能分析色彩领域,比如穿衣搭配、家装等设计或生活领域,但需要大量数据的支持,希望技术能够更好的被应用

    2022年6月29日
  • rocketmq 长轮询_消息队列RocketMQ版

    rocketmq 长轮询_消息队列RocketMQ版RocketMQ消费端有两种获取消息的方式,Push方式和Pull方式。但这两种方式都有一定的缺陷,后来采用了一种折中的方法,采用”长轮询“的方式,它既可以拥有Pull的优点,又能达到保证实时性的目的。长轮询的思想:服务端接收到新消息请求后,如果队列里没有新消息,并不急于返回,通过一个循环不断查看状态,每次waitForRunning一段时间(默认是5秒),然后再Check。Broker默认最长阻塞时间为15秒,默认情况下当Broker一直没有新消息,第三次Check的时候,等待时间超过最长阻塞时间,

    2022年10月14日
  • ubuntu 卸载php「建议收藏」

    ubuntu 卸载php「建议收藏」卸载:一、删除php的相关包及配置sudoapt-getautoremovephp7*二、删除关联sudofind/etc-name”*php*”|xargsrm-rf三、清除dept列表sudoaptpurge`dpkg-l|grepphp|awk'{print$2}’|tr”\n”””`四、检查是否卸载干净(无返回就是卸载完成)dpkg-l|grepphp7.0…

    2022年5月9日
  • redis(五)Jedis连接redis[通俗易懂]

    redis(五)Jedis连接redis[通俗易懂]一、创建项目1.1、创建项目,导入依赖<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.0.0</version></dependency>注意:远程服务器器可以连通p

    2022年9月8日
  • 解决VS2008在win7找不到输入序列号的地方

    解决VS2008在win7找不到输入序列号的地方VS2008在Windows7打开维护界面看不到可以输序列号的地方。因为微软把他隐藏了。我们可以借用工具把他显示出来:下载地址:http://www.zlsoft.com/techbbs/UploadFile/2010-7/2010716148883786.rar使用方法:打开工具,填入你的找到序列号,点击开启,打开控制面板,调出VS2008的维护界面,点击下一步

    2022年8月10日
  • vue-router实现路由懒加载( 动态加载路由 )_前端懒加载原理

    vue-router实现路由懒加载( 动态加载路由 )_前端懒加载原理为什么需要懒加载?    像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间过长,会出啊先长时间的白屏,即使做了loading也是不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的分担首页所承担的加载压力,减少首页加载用时vue异步组件 es提案的import() webpack…

    2022年10月7日

发表回复

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

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