JVM常见配置参数

前言

JVM按照其内存数据的内容将所需内存分配为 堆区非堆区 两部分:所谓 堆区:即为通过new的方式创建的对象所占用的内存空间;非堆区:即为代码、常量、外部访问(文件访问流所占资源)等。虽然java的垃圾回收机制能够很好的解决内存回收的问题,但是这种机制也仅仅只是回收 堆区 的资源,而对于 非堆区的资源就束手无策了,针对这一的资源回收只能凭借开发人员自身的约束来解决。

常见参数

堆区

  1. -Xms:初始堆大小;只要启动就占用的堆大小;通常大小为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。
  2. -Xmx:最大堆大小。通常为操作系统可用内存的1/4大小。但在开发中通常会 -Xms 与 -Xmx 两个参数配置成相同大小,其目的是为了能够在java垃圾回收机制完成堆区清理后不再需要重新分割计算机堆区的大小,从而提高性能。 java.lang.OutOfMemoryError:Java heap这个错误可以通过配置-Xms 和 -Xmx 参数来设置。

一般来讲对于堆区的内存分配只需对上述两个参数进行合理配置就可以了,但如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就需要对下面三个参数进行配置了:

  1. -XX:NewSize:设置新生代大小的绝对值,通常小于 -Xms 的值;
    -XX:MaxNewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于 -Xmx的值;
    【-Xmn:至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。】
    -XX:NewRatio:设置年轻代和年老代的比值。比如设置为3,则新生代:老年代=1:3,新生代占总heap的1/4;
    -XX:SurvivorRatio:年轻代中Eden区与两个Survivor区的比值。注意,Survivor区有form和to两个。比如设置为8时,那么eden:form:to=8:1:1;

非堆区

  1. -XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存);
    -XX:MaxPermSize:表示对非堆区分配的内存的最大上限;
    java.lang.OutOfMemoryError:PermGenspace这个OOM错误需要合理调大PermSize和MaxPermSize大小。
  2. -XX:HeapDumpOnOutOfMemoryError:发生OOM时转储堆到文件,这是一个非常好的诊断方法。
  3. -XX:HeapDumpPath:导出堆的转储文件路径。
  4. -XX:OnOutOfMemoryError:OOM时,执行一个脚本,比如发送邮件报警,重启程序。后面跟着一个脚本的路径。

NOTE:在配置之前一定要慎重的考虑一下自身软件所需要的非堆区内存大小,因为此处内存是不会被java垃圾回收机制进行处理的地方。并且更加要注意的是 最大堆内存与最大非堆内存的和绝对不能够超出操作系统的可用内存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值