垃圾回收调优(GC调优)

 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。

实际上,优先架构调优和代码调优,JVM优化是不得已的手段,大多数的Java应用不需要进行JVM优化

 

 先介绍三个概念:

  吞吐量:用户代码执行时间/(用户代码执行时间+GC执行时间)。

  暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间;

  内存占用:java堆区所占的内存大小

我们进行JVM调优的目的可以有很多,比如说:

  • Heap 内存使用率 <= 70%;
  • Old generation内存使用率<= 70%;
  • avgpause <= 1秒;
  • Full gc 次数0 或 avg pause interval >= 24小时 ;

-Xms 堆初始大小

-Xmx 最大堆大小

-Xmn 新生代大小

-XX:NewRatio  新生代和老年代的比例

-XX:+PrintGCDetails 查看详细的GC处理日志

-XX:+HeapDumpOnOutOfMemoryError 出现异常时输出堆内信息,这个一般要配合:                           -XX:HeapDumpPath=******使用,指定输出路径

比如:-Xms5M  -Xmx5M  -Xmn1M  -XX:SurvivorRatio=8  -XX:HeapDumpPath=/usr/local/gc.hprof

其他常有的还有-Xss 设置栈大小,如果不设置,默认值为1M

1.堆设置:

-Xms 堆初始大小

-Xmx 最大堆大小

通常设置为相同的值,避免运行时要不断扩展JVM内存

2.新生代设置

-Xmn

避免新生代设置过小,当新生代设置过小时,会带来两个问题:一是minor GC次数频繁,二是可能导致 minor GC对象直接进老年代(老年代对象太多会触发Full GC)

避免新生代设置过大,当新生代设置过大时,会带来两个问题:一是老年代变小,可能导致Full GC频繁执行;二是 minor GC 执行回收的时间大幅度增加。

3.老年代设置

一般吞吐量优先的应用都有一个较大的年轻代和一个较小的老年代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而老年代尽可能存放长期存活对象

4.方法区设置

基于jdk1.7版本,永久代:参数-XX:PermSize和-XX:MaxPermSize;

基于jdk1.8版本,元空间:参数 -XX:MetaspaceSize和-XX:MaxMetaspaceSize;

通常设置为相同的值,避免运行时要不断扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值