0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

垃圾收集器的JVM参数配置

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 16:35 次阅读

本篇文章我们就来给大家介绍垃圾收集器的 JVM 参数配置。

JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况。但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。下面我们就来对这些JVM参数进行详细的介绍。JVM参数主要分为以下三种(可以根据书写形式来区分):

1、标准参数

标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。

我们可以通过 -help 命令来检索出所有标准参数。

图片

关于这些命令的详细解释,可以参考官网:https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

-help 也是一个标准参数,再比如使用比较多的 -version也是。

①、-version

显示Java的版本信息图片

2、X 参数

对应前面讲的标准化参数,这是非标准化参数。表示在将来的JVM版本中可能会发生改变,但是这类以 -X开始的参数变化的比较小。

我们可以通过 Java -X 命令来检索所有-X 参数。

图片

关于这些参数的介绍,其实上图的中文解释很清楚了,这里我们不作过多的介绍。

3、XX参数

这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。

注意:这种参数是我们后续介绍JVM调优讲解最多的参数。

该参数的书写形式又分为两大类:

①、Boolean类型 格式:-XX:[+-]表示启用或者禁用name属性。

例子:-XX:+UseG1GC(表示启用G1垃圾收集器)

②、Key-Value类型 格式:-XX:=表示name的属性值为value。

例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)

4、参数详解

1、打印已经被用户或者当前虚拟机设置过的参数

-XX:+PrintCommandLineFlags

比如:

图片

2、最大堆和最小堆内存设置

-Xms512M:设置堆内存初始值为512M

-Xmx1024M:设置堆内存最大值为1024M

这里的ms是memory start的简称,mx是memory max的简称,分别代表最小堆容量和最大堆容量。但是别看这里是-X参数,其实这是-XX参数,等价于:

-XX:InitialHeapSize

-XX:MaxHeapSize

在通常情况下,服务器项目在运行过程中,堆空间会不断的收缩与扩张,势必会造成不必要的系统压力。所以在生产环境中,JVM的Xms和Xmx要设置成一样的,能够避免GC在调整堆大小带来的不必要的压力。

3、Dump异常快照以及以文件形式导出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆内存出现OOM的概率是所有内存耗尽异常中最高的,出错时的堆内信息对解决问题非常有帮助,所以给JVM设置这个参数(-XX:+HeapDumpOnOutOfMemoryError),让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址,这对于特别是对相隔数月才出现的OOM异常尤为重要。

这两个参数通常配套使用:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

4、发送OOM后,执行一个脚本

-XX:OnOutOfMemoryError

比如这样设置:

-XX:OnOutOfMemoryError="C:Program FilesJavajdk1.8.0_152binjconsole.exe"

表示发生OOM后,运行jconsole.exe程序。这里可以不用加“”,因为jconsole.exe路径Program Files含有空格。

利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。

5、打印gc信息

①、打印GC简单信息

-verbose:gc

-XX:+PrintGC

一个是标准参数,一个是-XX参数,都是打印详细的gc信息。通常会打印如下信息:

图片

比如第一行,表示GC回收之前有12195K的内存,回收之后剩余1088K,总共内存为125951K

②、打印详细GC信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

图片

6、指定GC日志以文件输出

-Xloggc:./gc.log

这个在参数用于将gc日志以文件的形式输出,更方便我们去查看日志,定位问题。

7、设置永久代大小

-XX:MaxPermSize=1280m

在JDK1.7以及以前的版本中,只有Hotspot 才有Perm区,称为永久代,它在启动时固定大小,很难进行调优。

在某些情况下,如果动态加载类过多,容易产生Perm区的 OOM。比如某个实际 Web 工程中,因为功能点较多,在运行过程中,要不断动态加载很多类,就会出现类似错误:

"Exception in thread 'dubbo client x.x.connect' java.lang.OutOfMemoryError:PermGenspace"

为了解决这个问题,就需要在项目启动时,设定运行参数-XX:MaxPermSize。

注意:在JDK1.8以后面的版本,使用元空间来代替永久代。在 JDK1.8以及后面的版本中,如果设定参数-XX:MaxPermSize,启动JVM不会报错,但是会提示:

Java Hotspot 64Bit Server VM warning:ignoring option MaxPermSize=1280m:support was removed in 8.0

8、垃圾收集器常用参数

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2996

    浏览量

    73867
  • 参数
    +关注

    关注

    11

    文章

    1773

    浏览量

    32075
  • JVM
    JVM
    +关注

    关注

    0

    文章

    157

    浏览量

    12205
  • 收集器
    +关注

    关注

    0

    文章

    30

    浏览量

    3126
收藏 人收藏

    评论

    相关推荐

    jvm参数配置问题怎么解决

    jvm参数配置问题
    发表于 05-05 17:29

    详细介绍了Java泛型、注解、并发编程

    VS 分区收集算法、GC 垃圾收集器、JAVA IO/NIO 、JVM 类加载机制的各大知识点。详细知识
    发表于 08-20 06:09

    Jvm垃圾回收机制及性能调优实战

    JVM中自动检测并移除不再使用的数据对象的这种机制称为:垃圾回收,简称GC。JVM通过使用垃圾收集器及使用相应的
    发表于 04-03 14:31 2次下载

    JVM入门之垃圾回收算法

    根据如何判定对象是垃圾垃圾回收算法分为两类:1、 「引用计数式垃圾收集」 (判定垃圾是通过引用计数
    的头像 发表于 02-10 11:40 774次阅读
    <b class='flag-5'>JVM</b>入门之<b class='flag-5'>垃圾</b>回收算法

    JVM垃圾机制是如何工作的呢?

    单线程收集器,“单线程” 的意义并不仅仅说明它只会使用一个 CPU 或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾
    的头像 发表于 02-28 16:08 568次阅读

    漫途智能网关助力必蓝水面垃圾收集器成为智慧数字城市的环境守护者!

    无锡高新区报道了一种“24小时自动吃垃圾”的神奇产品,该设备是一种智能化的水面垃圾收集器。 文章截图 这款水面垃圾自动收集器采用了最新的跌水
    的头像 发表于 05-09 16:25 595次阅读
    漫途智能网关助力必蓝水面<b class='flag-5'>垃圾</b><b class='flag-5'>收集器</b>成为智慧数字城市的环境守护者!

    Farmaid数据收集器开源分享

    电子发烧友网站提供《Farmaid数据收集器开源分享.zip》资料免费下载
    发表于 06-27 10:00 0次下载
    Farmaid数据<b class='flag-5'>收集器</b>开源分享

    如何选择垃圾收集器

    1、垃圾收集器种类 事实上Java虚拟机规范对垃圾收集器应该如何实现,并没有任何的规定,所以不同的厂商、不同版本的虚拟机所提供的垃圾
    的头像 发表于 10-09 16:48 655次阅读
    如何选择<b class='flag-5'>垃圾</b><b class='flag-5'>收集器</b>

    jvm调优参数

    JVM(Java虚拟机)是Java程序的运行环境,它负责解释Java字节码并执行相应的指令。为了提高应用程序的性能和稳定性,我们可以调优JVM参数JVM调优主要涉及到堆内存、
    的头像 发表于 12-05 11:29 594次阅读

    jvm参数的设置和jvm调优

    JVM(Java虚拟机)参数的设置和调优对于提高Java应用程序的性能和稳定性非常重要。在本文中,我们将详细介绍JVM参数的设置和调优方法。 一、J
    的头像 发表于 12-05 11:36 1410次阅读

    jvm配置metaspace最大值的参数

    不同的参数来进行配置。本文将详细介绍JVM配置Metaspace最大值的参数,包括-Xmx、-XX:MaxMetaspaceSize、-XX
    的头像 发表于 12-05 14:21 1991次阅读

    jvm配置的mx

    用于设置JVM的最大堆内存大小,即堆的上限。当堆内存不足时,JVM会触发垃圾回收机制以释放内存。如果垃圾回收无法释放足够的内存,JVM可能会
    的头像 发表于 12-05 14:24 672次阅读

    weblogic jvm参数配置

    在WebLogic中,JVM参数配置是非常重要的,它可以对应用程序的性能和稳定性产生直接影响。JVM参数通过调整Java虚拟机的运行时行为,
    的头像 发表于 12-05 14:31 1363次阅读

    weblogic控制台配置jvm参数

    WebLogic Server是一个用于构建、部署和管理大规模分布式应用程序的Java EE应用服务。在WebLogic控制台中配置JVM参数非常重要,它可以影响应用程序性能和服务
    的头像 发表于 12-05 14:48 2633次阅读

    深入理解Java 8内存管理机制及故障排查实战指南

    Java的自动内存管理机制是由 JVM 中的垃圾收集器来实现的,垃圾收集器会定期扫描堆内存中的对象,检测并清除不再使用的对象,以释放内存资源
    的头像 发表于 04-04 08:10 962次阅读
    深入理解Java 8内存管理机制及故障排查实战指南