前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM调优-有调优我不用,我就耗着,哎,就是玩儿

JVM调优-有调优我不用,我就耗着,哎,就是玩儿

作者头像
唔仄lo咚锵
发布2021-12-31 09:11:33
3620
发布2021-12-31 09:11:33
举报
文章被收录于专栏:blog(为什么会重名,真的醉了)

文章目录

建议先看此博客:还不会JVM,是准备家里蹲吗?

JVM调优参数

参数

说明

-Xms

初始堆大小(默认物理内存的1/64)

-Xmx

最大堆大小(默认物理内存的1/4)

-verbose:gc

输出GC情况

-Xmn

新生代大小

-XX:NewSize

设置新生代大小

-XX:MaxNewSize

新生代最大值

-XX:PermSize

设置持久代初始值(默认物理内存的1/64)

-XX:MaxPermSize

设置持久代最大值

-Xss

每个线程的堆栈大小

-XX:ThreadStackSize

设置每个线程的堆栈大小

-XX:NewRatio

新生代与老年代比值(默认4)

-XX:SurvivorRatio

Eden区与Survivor区的比值(默认8)

-XX:MaxTenuringThreshold

进入老年代年龄

-XX:+AggressiveOpts

加快编译

-Xnoclassgc

禁用垃圾回收

-XX:+HeapDumpOnOutOfMemoryError

内存溢出异常时Dump出当前的堆内存转储快照

-XX:PretenureSizeThreshold

大于该值直接进入老年代分配(字节为单位)

并行收集器

参数

说明

-XX: +UseSerialGC

设置串行收集器

-XX:+UseParallelGC

设置并行收集器

-XX:+UseParNewGC

设置新生代用并行收集

-XX:+UseParallelOldGC

设置老年代用并行收集

-XX:ParallelGCThreads

并行收集器线程数

-XX:MaxGCPauseMillis

新生代每次垃圾回收最大时间

-XX:+UseAdaptiveSizePolicy

自动选择新生代大小和相应的Survivor区比例

-XX:GCTimeRatio

设置垃圾回收时间占程序运行时间的百分比

-XX:+ScavengeBeforeFullGC

Full GC前调用YGC

CMS收集器

参数

说明

-XX:+UseConcMarkSweepGC

使用CMS内存收集

-XX:CMSFullGCsBeforeCompaction

多少次后进行内存压缩

-XX:+CMSParallelRemarkEnabled

降低标记停顿

-XX:+UseCMSCompactAtFullCollection

Full GC时对老年代的压缩

-XX:CMSInitiatingOccupancyFraction

使用多少后开始CMS回收(默认92%)

-XX:CMSInitiatingPermOccupancyFraction

永久代达到多少比率时触发(默认92%)

-XX:+CMSIncrementalMode

设置为增量模式

辅助信息

参数

说明

-XX:+PrintGC

打印GC信息

-XX:+PrintGCDetails

打印GC详细信息

-XX:+PrintGCTimeStamps

打印GC的时间戳

-XX:+PrintGCApplicationStoppedTime

打印GC时程序暂停时间

-XX:+PrintGCApplicationConcurrentTime

打印GC前程序未中断的执行时间

-XX:+PrintHeapAtGC

打印GC前后堆的信息

-Xloggc:filename

将日志输出到文件(filename)中

-XX:+TraceClassLoading

类加载信息

-XX:+TraceClassUnLoading

类卸载信息

-XX:+PrintTLAB

打印TLAB使用情况

通过上述JVM命令参数,我们可以对JVM相应调整,打印辅助信息等,根据具体的业务需求,选择合适的调优方案,比如:

  1. 吞吐量大优先的配置: -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy 新生代老年代都用并行收集器,新生代设置GC最大时间,无法满足此时间自动调整新生代大小,并且自动选择新生代大小和相应的Survivor区比例。
  2. 响应时间优先的配置 -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection 设置运行多少次GC以后对内存空间进行压缩、整理,消除并发收集器碎片。

IDEA实战

优先级:全局配置<应用配置

即作用范围越大,优先级越低。

全局配置

Help->Edit Custom VM Options…

idea64.exe.vmoptions文件中配置即可,然后需要重启IDEA

应用配置

Run->Edit Configurations…

测试

就顺着上一步的printGC测试一下。

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        ArrayList<byte[]>list=new ArrayList<>();
        for(int i=0;i<10240;i++){ //10G
            list.add(new byte[1024*1024]); //1M
        }
    }
}

虽然通过JVM参数调优,我们可以优化业务,打印辅助信息debug,但是对于大量代码或者肉眼debug出不来时(明明咋看都是对的 ),人工就显得杯水车薪了,这时需要分析Dump文件(-XX:+HeapDumpOnOutOfMemoryError)安利一款强大的工具——JProfiler,觉得下面麻烦的话再安利一个Dump在线分析网站PerFMa

JProfiler

安装软件

官方下载地址

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

注册码可参考这篇博客

IDEA集成

File->Settings->Plugins

Dump分析实战

配置参数:-XX:+HeapDumpOnOutOfMemoryError,OOM时输出Dump文件。

双击这个文件(默认JProfiler打开)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • JVM调优参数
      • 并行收集器
        • CMS收集器
          • 辅助信息
          • IDEA实战
            • 全局配置
              • 应用配置
                • 测试
                • JProfiler
                  • 安装软件
                    • IDEA集成
                      • Dump分析实战
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档