java堆栈大小设置策略_Jvm参数及调优分析

本文探讨了Java工程师对JVM的深入理解,特别是关于堆大小设置的重要性。详细解释了JVM的堆内存限制,以及如何通过参数如-Xmx、-Xms、-Xmn等进行配置。此外,文章还涉及了线程堆栈大小的设置,强调了合理的堆栈大小对系统性能的影响。最后,文章提到了JVM调优的步骤,包括监控GC状态、生成堆dump文件、分析结果并调整参数,以及CMS收集器的优化流程。
摘要由CSDN通过智能技术生成

背景

随着互联网的发展以及java生态的不断扩大,目前市面对java方面的人才拥有两方面的要求,一个是扩大自己的知识面对常用的java架构比较熟悉,扩张自己的知识广度,往架构方面发展,另一方面是深挖技术的深度,对java的底层的实现原理进行深挖,往技术专家方向发展。但是不论是往广度还是往深度方向发展,对于java工程师来说,对java虚拟机(jvm)的了解是必不可少的,了解jvm参数会进行性能调优对于我们来说越来越成为一种必备的技能了

jvm参数

堆大小设置

JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478M,另外,整个堆大小=年轻代大小 + 年老代大小 + 持久代大小(JDK8中已经把持久代(PermGen Space) 干掉了,取而代之的元空间(Metaspace)。Metaspace占用的是本地内存,不再占用虚拟机内存)。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xmx1800M  ## 设置JVM最大可用内存为1800M

-Xms1800M  ## 设置JVM初始内存为1800M,建议与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存

-Xmn300M  ## 设置年轻代最大大小为300M(-Xmn(-XX:MaxNewSize))

-XX:NewSize=100M  ## JVM启动时分配的新生代内存为100M

-Xss512K  ## 设置每个线程的堆栈大小512K 。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右,所以根据这个规则可以合理设置自己本机的-Xss

-XX:NewRatio=4  ## 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代),设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈(除去持久代)的1/5

-XX:SurvivorRatio=4  ## 设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6

-XX:PermSize=300M  ## 设置持久代初始化大小为300M (JDK8中已经把持久代(PermGen Space) 干掉了)

-XX:MaxPermSize=500M  ## 设置持久代最大大小为300M (JDK8中已经把持久代(PermGen Space) 干掉了)

-XX:MaxTenuringThreshold=0  ## 设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。默认值为:15

回收器选择

JVM给了三种选择:串行收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值