【JVM】JVM参数释义

0、前言

JVM对内存的自动管理(内存分配和垃圾回收)使得Java程序员可以较少地关注JVM的内存状态,更过地专注于系统的业务逻辑开发。然而这一优势也带来了一定的弊端,Java程序员对内存的控制程度是比较弱的,系统状态一旦发生异常,异常的原因查找及定位相对来说成本就比较高,这就要求程序员和运维人员能够通过一定的方法在JVM运行前合理配置,运行中有效观察,保证一个服务的可用性与稳定性。

"一定的方法"就是指JVM相关的参数。笔者通过本文,和读者朋友讨论JVM参数及其含义,并附一个JVM调优的案例,辅以相关参数的说明。

1、JVM参数

1.1、JVM堆参数

参数名称 含义 默认值 说明
-Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制。
-Xmx 最大堆大小 物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
-Xmn(-XX:MaxNewSize) 年轻代最大值 此处的大小是(eden+ 2 survivor space),与jmap -heap中显示的New gen是不同的。
整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。增大年轻代后,将会减小年老代大小。
此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:NewSize 设置年轻代初始化内存
-XX:MaxNewSize 年轻代最大值
-XX:PermSize 持久代(perm gen)初始值 物理内存的1/64
-XX:MaxPermSize 设置持久代最大值 物理内存的1/4
-Xss 每个线程的堆栈大小 JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。
在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
一般小的应用, 如果栈不是很深, 应该是128k够用的。大的应用建议使用256k。
这个选项对性能影响比较大,需要严格的测试。
和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"” -Xss is translated in a VM flag named ThreadStackSize” 一般设置这个值就可以了。
-XX
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值