jvm四之性能调优

常见问题处理

64位JDK和32最大的不同就是64位可以使用大内存,
但因此造成如果出现问题排查,dump的文件过大,产生快照也无法分析
而且64位因为涉及到指针膨胀和数据类型对齐之内,造成无辜内存损失,
最重要的是性能比32位低

根据运行环境选择适当的位数JDK,以及针对吞吐和并发请求等条件选择垃圾回收器

使用nio时,因为使用的是系统内存,所以jvm运行时候,设置恰当的堆内存,以便保留适当的系统内存给nio调用,避免直接内存溢出

尽量避免使用Runtime.getRuntime().exec()调用外部脚本,这个命令会创建一个和当前运行环境一样的进程,然后执行脚本,在注销进程,尽量采用api执行.

服务器通信,尽量避免一方访问过多,另一方无法处理的问题,可用异步生产者消费者处理

jvm调优

编译时间和类加载时间优化

禁用字节码校验,如果你确信系统可信.-Xverify:none
编译时间:可设置-server或者-client选择编译环境模式,以及-Xint禁止编译器执行,强制使用解释器解析字节码执行,不推荐使用

调整垃圾收集频率

垃圾回收主要是新生代和老年代内存不足造成的,当内存不足,就会频繁GC,每次GC后,如果没设置固定容量就会不停扩容
解决方案:提高堆和方法区大小,且设置固定大小
-XX:PermSize=10M -XX:MaxPermSize=10M
-XX:PermSize:限制方法区大小
-XX:MaxPermSize:最大大小
-Xms20M|-Xmx20M:堆的最小值和最大值设置为一样即可避免堆自动扩展、

jdk8中永久代废除了,采用Metaspace,相应的固定大小命令如下
-XX:MetaspaceSize=N -XX:MaxMetaspaceSize

通过-XX:DisableExplicitGC命令显示屏蔽掉代码中调用System.gc()

设置垃圾收集器降低延迟

根据具体生产情况选择垃圾回收器,比如针对CPU利用率不高的情况,可选择CMS,降低吞吐,提高垃圾回收效率,
-xx:+useConcMarkSweepGC
-xx:+UseParNewGC (默认CMS对应的新生代收集器)
避免吞吐降低过高,可设置老年代回收百分比上限
-XX:CMSInitiatingOccupancyFraction=XX,JDK8中默认值是92

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值