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> 表示启用或者禁用name属性。

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

②、Key-Value类型

  格式:-XX:<name>=<value> 表示name的属性值为value。

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

4、参数详解(持续更新)

  本节我们会持续更新罗列一些JVM参数。

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 Files\Java\jdk1.8.0_152\bin\jconsole.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、垃圾收集器常用参数

  

参考文档:https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

转载于:https://www.cnblogs.com/ysocean/p/11109018.html

Java虚拟机详解(五)------JVM参数(持续更新)相关推荐

  1. Java虚拟机详解----常用JVM配置参数

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. 尚硅谷2020最新版宋红康JVM教程更新至中篇(java虚拟机详解,jvm从入门到精通)

    目录 类的加载第一步----loading 加载".class"文件的方式: 类的加载第二步----linking![在这里插入图片描述](https://img-blog.csd ...

  3. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  4. Java虚拟机详解(七)------虚拟机监控和分析工具(1)——命令行

    通过前面的几篇博客,我们介绍了Java虚拟机的内存分配以及内存回收等理论知识,了解这些知识对于我们在实际生产环境中提高系统的运行效率是有很大的帮助的.但是话又说回来,在实际生产环境中,线上项目正在运行 ...

  5. Java虚拟机详解03----常用JVM配置参数

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Java虚拟机详解01----初识JVM

    主要内容如下: JVM的概念 JVM发展历史 JVM种类 Java语言规范 JVM规范 一.JVM的概念: JVM: Java Virtual Machine,意为Java虚拟机. 虚拟机: 指通过软 ...

  7. JVM内幕:Java虚拟机详解

    这篇文章解释了Java 虚拟机(JVM)的内部架构.下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件. 上图显示的组件分两个章节解释.第一章讨论针对每个线程创建的组件,第二章节讨 ...

  8. Java虚拟机详解04----GC算法和种类【重要】

    本文主要内容: GC的概念 GC算法  引用计数法(无法解决循环引用的问题,不被java采纳) 根搜索算法 现代虚拟机中的垃圾搜集算法: 标记-清除 复制算法(新生代) 标记-压缩(老年代) 分代收集 ...

  9. Java虚拟机详解04----GC算法和种类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

最新文章

  1. 芯片工程师成长之路_实施工程师的成长之路 | 来自咸职厚溥17级学姐的分享
  2. new fabu
  3. 使用原生js写ajax
  4. 前端学习(902):this指向问题
  5. window安全模式的用途
  6. 3个可以写进简历的京东AI NLP项目实战
  7. 一个人的命运决定于晚上8点到10点之间...
  8. Java 11 的新特性(上)
  9. linux用megacli看raid信息,Linux中使用MegaCli工具查看、管理Raid卡信息
  10. STM32——库函数流水灯程序
  11. 电子信息业取得长足发展 效益与质量同步提升
  12. 无线网dns服务器设置错误,DNS错误怎么办(如何正确设置DNS)
  13. 一个比较牛逼人的博客
  14. 【虾仁猪心!!】--1
  15. uniApp开发微信小程序减少包大小
  16. 软件测试到底要不要报培训班学习?看完这个就知道了
  17. 最新今日头条抢红包福袋脚本下载
  18. word中使用mathtype插入公式编号出现Equation Chapter (Next) Section 1字样
  19. ubuntu 16.04-设置合上笔记本盖子不休眠
  20. 对角线用计算机怎么算,显示器对角线尺寸与厘米英寸分辨率在线转换关系

热门文章

  1. DevExpress ChartControl大数据加载时有哪些性能优化方法
  2. sublime Text 2 安装Sublime Package Control
  3. 计算机AL教程笔记,计算机系统基础学习笔记(2)-数据的位运算操作
  4. java和php设置的cookies_php带cookie访问下载文件 header设置
  5. 可作为工质状态参数的是_制冷工质的热力状态参数都有哪些?
  6. 微信怎么开免流量服务器,微信如何省流量?关掉这几个功能 省一大半流量
  7. 003_FastDFS分布式横向扩容和纵向添加storage
  8. 084_html DOM
  9. html5+调用safari,Safari浏览器不酷,HTML5无效元素; JavaScript是
  10. php postgresql多条,PHP操作Postgresql封装类与应用完整实例