常用的 JVM 参数(第三章)

news2025/1/11 23:48:10

《实战Java虚拟机:JVM故障诊断与性能优化 (第2版)》

第三章 常用的 JVM 参数

3.1. 掌握跟踪调试参数 - 一切运行都有迹可循

参数类型参数作用备注
GC 参数-JVM 提供了一些跟踪系统状态的参数,使用给定的参数执行 JVM,就可以在系统运行时打印相关日志,用于问题分析
日志跟踪参数-如果垃圾回收频繁,或者占用了太长的 CPU 时间,就需要一些跟踪参数来进一步甄别垃圾回收的效率和效果
--XX:+PrintGC使用该参数后启动 JVM 后,只要遇到 GC,就会打印 GC 日志(在 JDK9、JDK10 中建议使用 -Xlog:gc);JDK9、JDK10 默认使用 G1 作为垃圾回收器,使用参数 -Xlog:gc 来打印 GC 日志
--XX:+PrintGCDetails打印更加详细的 GC 信息;该参数还会使 JVM 在退出前打印堆的详细信息,详细信息描述了当前堆的各个区间的使用情况(在 JDK9、JDK10 中建议使用 -Xlog:gc*)
--XX:+PrintHeapAtGC打印更全面的堆信息;在每次 GC 前、后分别打印堆的信息(考虑到兼容性,从 JDK9 开始已经删除此参数,查看堆信息可以使用 VisualVM)
--XX:+PrintGCTimeStamps打印 GC 发生的时间;该参数会在每次 GC 时,额外输出 GC 发生的时间,该输出时间为 JVM 启动后的时间偏移量(在 JDK9、JDK10 中使用 -Xlog:gc* 已经默认打印出时间)
--XX:+PrintGCApplicationConcurrentTime打印应用程序的执行时间
--XX:+PrintGCApplicationStoppedTime打印应用程序由于 GC 而产生的停顿时间
--XX:+PrintReferenceGC打印系统内的软引用、弱引用、虚引用和 Finallize 队列(考虑到兼容性,从 JDK9 开始已经删除此参数,查看堆信息可以使用 VisualVM)
--Xloggc:log/gc.log在当前目录的 log 文件夹下的 gc.log 文件中记录所有的 GC 日志(在 JDK9、JDK10 中建议使用 -Xlog:gc:log/gc.log)
类加载/卸载跟踪参数-跟踪运行时动态生成(动态代理、AOP 等技术生成的类)的比较隐蔽的类
--verbose:class跟踪类的加载/卸载(在 JDK9、JDK10 中建议使用 -Xlog:class+load=info)
--XX:+TraceClassLoading跟踪类的加载(在 JDK9、JDK10 中建议使用 -Xlog:class+load=info)
--XX:+TraceClassUnloading跟踪类的卸载(在 JDK9、JDK10 中建议使用 -Xlog:class+unload=info)
--XX:+PrintClassHistogram在运行时打印、查看系统中类的分布情况在 Java 的控制台按下 Ctrl+Break 组合键,控制台上就会显示当前的类信息柱状图
系统参数-可以获取当前系统的实际运行参数
--XX:+PrintVMOptions可以在程序运行时打印 JVM 接收到的命令行显示参数
--XX:+PrintCommandLineFlags可以打印传递给 JVM 的显示和隐式参数隐式参数未必是通过命令行直接给出的,它可能是在 JVM 启动时自行设置的
--XX:+PrintFlagsFinal打印所有的系统参数的值开启这个参数后,JVM 可能会产生 500 多行输出,每一行为一个配置参数及其当前取值

3.2. 堆的配置参数 - 让性能飞起来

1.当 Java 进程启动时,JVM 就会分配一块初始堆空间,可以使用参数 -Xms 指定这块空间的大小。一般来说,JVM 会尽可能维持在初始堆空间的范围内运行。但是如果初始堆空间耗尽,JVM 将会对堆空间进行扩展,其扩展上限为最大堆空间,最大堆空间可以使用参数 -Xmx 指定。
在这里插入图片描述

类型配置参数说明备注
整个堆---
--Xmx设置最大堆
--Xms设置初始堆在实际工作中,可以直接将初始堆与最大堆设置为相等,这样的好处是,可以减少程序运行时进行垃圾回收的次数,从而提高程序的性能
新生代---
--Xmn设置新生代的大小设置一个较大的新生代会减少老年代的大小,这个参数对系统性能及 GC 行为有很大的影响。新生代的大小一般设置为整个堆空间的 1/3 到 1/4。
--XX:SurvivorRatio设置新生代中 eden 区和 from/to 区的比例含义为:-XX:SurvivorRatio=eden/from=eden/to
---不同的堆分布情况堆系统会产生一定影响。在实际工作中,应该根据系统的特点做合理的设置,基本策略是:尽可能将对象预留在新生代,减少老年代的次数。
--XX:NewRatio设置新生代和老年代的比例-XX:NewRatio=老年代/新生代
堆溢出处理参数---
--XX:+HeapDumpOnOutOfMemoryError可以在内存溢出时导出整个堆的信息和它配合使用的还有 -XX:HeapDumpPath
--XX:HeapDumpPath可以指定导出堆的存放路径-
--XX:OnOutOfMemoryError可以在发生错误时执行一个脚本文件。该文件可以用于奔溃的程序自救、报警或者通知,也可以帮助开发人员获取更多的系统信息,如完整的线程转存(即 Thread Dump 或者 Core Dump)文件“-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p”

3.3. 非堆内存的参数配置 - 别让性能有缺口

除了堆内存,JVM 还有一些内存用于方法区、线程栈和直接内存。它们与堆内存是相对独立的。与堆内存相比,虽然这些内存空间和应用程序本身的关系可能不那么密切,但是从系统层面看,有效、合理地配置这些内存参数,对系统的性能和稳定也有着重要作用。

类型配置参数说明备注
方法区-主要存放类的元信息-
--XX:PermSize配置初始的永久区大小在 JDK1.6 和 JDK1.7 等版本中
--XX:MaxPermSize配置最大永久区大小在 JDK1.6 和 JDK1.7 等版本中
--XX:MaxMetaspaceSize指定永久区的最大可用值从 JDK1.8 开始,永久区被彻底删除,使用了新的元数据区存放类的元数据。在默认情况下,元数据区只受系统可用内存的限制
-每个线程私有的内存空间-
--Xss指定线程的栈大小
直接内存-在 NIO 被广泛使用后,成为 Java 程序中非常重要的组成部分。直接内存跳过了 Java 堆,使 Java 程序可以直接访问原生堆空间直接内存适合申请次数较少、访问较频繁的场合
--XX:MaxDirectMemorySize设置最大可用直接内存。如果不设置,默认值为最大堆空间,即 -Xmx 的值当直接内存使用量达到 -XX:MaxDirectMemorySize 时,就会触发垃圾回收,如果垃圾回收不能释放足够的空间,直接内存溢出依然会引起系统的 OOM。

3.4. JVM 的工作模式 - Client 和 Server 二选一

目前 JVM 支持 Client 和 Server 两种运行模式。使用参数 -client 可以指定使用 Client 模式,使用参数 -server 可以指定使用 Server 模式。在默认情况下,JVM 会根据当前计算机系统环境自动选择运行模式。使用 -version 参数可以查看当前模式。

模式优点缺点适用场景
Client较 Server 模式启动速度快较 Server 模式性能较差适用于运行时间不长、追求启动速度的用户界面程序
Server启动时会尝试收集更多的系统性能信息,使用更复杂的优化算法对程序进行优化;当系统完全启动并进入运行稳定期后,执行速度会远远快于 Client 模式启动比较慢适用于后台长期运行的系统;64位系统中 JVM 更倾向于使用 Server 模式
类型配置参数说明备注
--XX:+PrintFlagsFinalJVM 在 Server 模式和 Client 模式下的各种参数可能会有很大的不同。查看给定参数的默认值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ssm框架实现家庭理财收支系统(源码+数据库+文档)

一、项目简介 本项目是一套基于ssm框架实现家庭理财收支系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c…

【谷粒学院】微信扫码登录(199~206)

199.OAuth2介绍 OAuth2是什么? OAuth2是针对特定问题的一种解决方案 主要可以解决两个问题:开放系统间授权、分布式访问问题 一、OAuth2解决什么问题 1、OAuth2提出的背景 照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服…

_Linux (HTTP协议)

文章目录1. 认识URL2. urlencode和urldecode3. HTTP协议格式3-1. HTTP请求3-1. HTTP响应4. HTTP的方法5. HTTP的状态码6. TTP常见Header7. 最简单的HTTP服务器虽然我们说, 应用层协议是我们程序猿自己定的但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我…

Java基础:JDK7-时间Date

JDK7以前时间相关类 1.Date Date date new Date(); , sout(date)得到的是现在所处位置的时间 Date date new Date(0L); , sout(date)得到的是时间原点也就是1970年1月1日08:00(东八区). date.setTime(1000L); sout(date)得到的是时间原点后一秒钟的时间 long time date.g…

【matplotlib】可视化解决方案——如何设置matplotlib风格集

概述 一般情况下,为了获得数据可视化展示效果,在代码实现的尾部会调用 plt.show(),这种情况下会调用默认的绘图风格,即白色底色,字体和线条呈现黑色。在某些情况下会显得很不协调。如果想要将展示效果以一个固定的风格…

华为OD机试用Python实现 -【称砝码】(2023-2-26华为OD机试人员抽到的真题)

华为OD机试题 华为 OD 机试 300 题大纲称砝码题目输入输出示例一输入输出说明:Python 代码展示编码思路华为 OD 机试 300 题大纲 参加华为 od 机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/categor…

【JavaSE】集合(Map)

文章目录1.Map接口1.1常用方法1.2 遍历2.HashMap2.1Hash表数据结构2.2 Map.put实现原理2.3 Map.get实现原理2.4扩容2.5 同时重写hashCode和equals2.6 JAVA8对HashMap改进3.Hashtable4.Properties5.TreeMap5.1 概述5.2 自定义类实现Comparable6.集合工具类Collections1.Map接口 …

Linux | 1. 挂载新硬盘与磁盘管理

如有错误,恳请指出。 1. Ubuntu挂载新硬盘 查看磁盘状态:sudo fdisk -l 1)为新硬盘分区 使用 fdisk 指令对 /dev/sdb 进行分区操作:sudo fdisk /dev/sdb。进入分区工具后,我们可以输入 m 看指令说明,注意…

(四十八)大白话线上数据库不确定性的性能抖动优化实践(上)

之前我们花费了很大篇幅来给大家深入和细致的讲解数据库在执行增删改这类更新语句时候的底层原理,这里涉及到了很多数据库内核级的概念,比如buffer pool、redo log buffer、lru/flush链表,等等,大家对数据库执行更新语句的原理都有…

黑客入门破解网络密码常用的九个方法!

个人网络密码安全是整个网络安全的一个重要环节,如果个人密码遭到黑客破解,将引起非常严重的后果。比如,银行卡账户密码被盗,你就给别人打工了。所以,增强网民的网络安全意识是网络普及进程的一个重要环节。 常言道&am…

ThreadPoolExecutor执行流程和拒绝策略

【面试常考】 之前我们讲到的多线程案例里面的Executors 本质上是 ThreadPoolExecutor 类的封装. ThreadPoolExecutor 提供了更多的可选参数, 可以进一步细化线程池行为的设定. 什么是ThreadPoolExcutor类? 首先通过文档我们看看ThreadPoolExcutor提供给我们的构造…

超详细彻底卸载Anaconda详细教程

一、在开始出打开Anaconda Prompt 二、打开后,输入conda install tqdm -f命令并按回车键 conda install tqdm -f三、之后页面会出现一个WANNING,这个我们不用在意,之后会出现一个y/n提示框,在这里我们输入y或者Y y四、输入con…

小程序容器与微服务架构的关系

随着移动互联网的发展,小程序已经成为了一种非常流行的应用方式,它可以在不安装任何应用的情况下,直接在移动终端设备(如:App,iPad等)中运行。微服务架构则是一种的分布式系统架构,可…

SpringBoot整合MybatisPlus多数据源

相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题,并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换,因此想了解一下该组件是如何运行的&…

以太网协议和DNS

目录 🐕今日良言:跨过困难,去迎接更好的自己. 🐳一、以太网桢格式 🐳二、DNS 🐕今日良言:跨过困难,去迎接更好的自己. 🐳一、以太网桢格式 数据链路层考虑的是相邻两个节点(通过网线/光纤/无线直接相连的两个设备…

有趣的表盘布局环绕动画

前言 C端的介绍页中,设计师设计动画特效都非常有意思。这次遇到了“表盘内容元素环绕效果”,类似于表盘中的分针在一格一格运动一样,只是这次动画运动的元素不一样。 效果如下: 实现表盘布局 合理的运用JavaScrip的三角函数&am…

Malware Dev 01 - 免杀之 PPID Spoofing 原理解析

写在最前 如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里: https://discord.gg/9XvvuFq9Wb我会提供备考过程中尽可能多的帮助,并分享学习和实践过程…

第十五天笔记

1. 编程实现计算2023-2-1到2023-3-1相隔多少天? from datetime import datetimestart_date_str "2023-2-1"end_date_str "2023-3-1"start_date datetime.strptime(start_date_str, "%Y-%m-%d")end_date datetime.strptime(end_d…

pmp项目管理考完有什么好处?

作为曾经5A(现在改3A了)通过考试的老学姐说下经验 做好规划 一定要合理安排自己预习、复习和做题的时间,提前规划。其中不要小看课前预习这件事,带着问题去上课,绝对能事半功倍。同时也能及时知道老师到底在讲解哪个知…

网络安全入门:不可不知的8款免费Web安全测试工具

随着 Web 应用越来越广泛,Web 安全威胁日益凸显。黑客利用网站操作系统的漏洞和 Web服务程序的 SQL 注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使…