JVM 常见配置参数

news2024/11/15 14:01:41

JVM 配置常见参数
Java虚拟机的参数,在启动jar包的时候通过java 命令指定JVM参数
在这里插入图片描述

-options表示Java虚拟机的启动参数,class为带有main()函数的Java类,args表示传递给主函数main()的参数。

一、系统查看参数:

-XX:+PrintVMOptions可以在程序运行时打印虚拟机接收到
-XX:+PrintCommandLineFlags可以打印传递给虚拟机的显式和隐式参数,打印出包括配置文件在内的配置
-XX:+PrintFlagsFinal,它会打印所有的系统参数的值

1.1.1 查看当前系统的垃圾回收器使用的是哪种

jinfo -flags [进程pid]

找到-useXXXX这样的参数,参数后即为所使用的GC回收器
在这里插入图片描述
在这里插入图片描述

[xxx@localhost vpdm]$  jinfo -flags 17049
Attaching to process ID 17049, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.341-b10
Non-default VM flags: -XX:CICompilerCount=4 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=805306368 -XX:MaxHeapSize=805306368 -XX:MaxNewSize=268435456 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=268435456 -XX:OldSize=536870912 -XX:+PrintFlagsFinal -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Xms768m -Xmx768m -XX:+PrintFlagsFinal -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dumplog/dumplog.log

1.1 堆的配置参数

最大堆和初始堆的设置 参数 -Xms -Xmx
新生代的配置 参数-Xmn 参数-XX:SurvivorRatio用来设置新生代中eden区和from/to区的比例
-XX:SurvivorRatio可以设置eden区与survivor的比例。-
-XX:NewRatio可以设置老年代与新生代的比例。
参数-Xmn可以用于设置新生代的大小。设置一个较大的新生代会减小老年代的大小,这个参数对系统性能及GC行为有很大的影响。新生代的大小一般设置为整个堆空间的1/3到1/4。
参数-XX:SurvivorRatio用来设置新生代中eden区和from/to区的比例,它的含义如下

在这里插入图片描述
在JDK 1.6、JDK 1.7中,方法区可以理解为永久区(Perm)。在JDK 1.8、JDK1.9、JDK1.10中,永久区已经被彻底移除。取而代之的是元数据区,元数据区大小可以使用参数-XX:MaxMetaspaceSize指定(一个大的元数据区可以使系统支持更多的类),这是一块堆外的直接内存

Perm区域的参数配置由-XX:MaxMetaspaceSize 替换

1.2 堆OOM 导出堆的参数配置

参数-XX: +HeapDumpOnOutOfMemoryError 配置堆异常时导出
-XX:HeapDumpPath=./dumplog/dumplog.log 配置都出 堆 dump文件的路径

nohup java -Xms768m -Xmx768m  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dumplog/dumplog.log    -jar xxxxxx.jar > logs/xxxxxx.log 2>&1 &

1.3非堆内存的参数配置

1.3.1方法区配置

-XX:MaxMetaspaceSize指定永久区的最大可用值
在JDK1.6和JDK1.7等版本中,可以使用-XX:PermSize和-XX:MaxPermSize配置永久区大小

1.3.2 栈配置

-Xss参数指定线程的栈大小

1.3.2 直接内存配置

参数 -XX:MaxDirectMemorySize

1.4 GC 垃圾回收器常见参数

1.4.1 与串行回收器相关的参数

·-XX:+UseSerialGC:在新生代和老年代使用串行回收器。
·-XX:SurvivorRatio:设置eden区大小和survivior区大小的比例。
·-XX:PretenureSizeThreshold:设置大对象直接进入老年代的阈值。当对象的大小超过这个值时,将直接被分配在老年代。
·-XX:MaxTenuringThreshold:设置对象进入老年代的年龄的最大值。每一次 Minor GC后,对象年龄就加1。任何大于这个年龄的对象,一定会进入老年代。

1.4.2.与并行GC相关的参数

·-XX:+UseParNewGC(考虑到兼容性问题,JDK 9、JDK 10已经删除):在新生代使用并行回收器。
·-XX:+UseParallelOldGC:老年代使用并行回收器。
·-XX:ParallelGCThreads:设置用于垃圾回收的线程数。通常情况下可以和CPU数量相等,但在CPU数量比较多的情况下,设置相对较小的数值也是合理的。
·-XX:MaxGCPauseMillis:设置最大垃圾回收停顿时间。它的值是一个大于0的整数。回收器在工作时,会调整 Java 堆大小或者其他一些参数,尽可能地把停顿时间控制在MaxGCPauseMillis以内。
·-XX:GCTimeRatio:设置吞吐量大小。它的值是一个 0 到 100之间的整数。假设GCTimeRatio的值为n ,那么系统将花费不超过1/(1+n )的时间用于垃圾回收。
·-XX:+UseAdaptiveSizePolicy:打开自适应GC策略。在这种模式下,新生代的大小、eden区和survivior区的比例、晋升老年代的对象年龄等参数会被自动调整,以达到在堆大小、吞吐量和停顿时间之间的平衡。

1.4.3.与CMS回收器相关的参数(JDK9、JDK10已经开始废弃CMS回收器,建议使用G1回收器)

·-XX:+UseConcMarkSweepGC:新生代使用并行回收器,老年代使用CMS+串行回收器。
·-XX:ParallelCMSThreads:设定CMS的线程数量。
·-XX:CMSInitiatingOccupancyFraction:设置 CMS 回收器在老年代空间被使用多少后触发,默认为68%。
·-XX:+UseCMSCompactAtFullCollection:设置 CMS 回收器在完成垃圾回收后是否要进行一次内存碎片的整理。
·-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩。
·-XX:+CMSClassUnloadingEnabled:允许对类元数据区进行回收。
·-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收(前提是激活了-XX:+CMSClassUnloadingEnabled)。
·-XX:UseCMSInitiatingOccupancyOnly:表示只在到达阈值的时候才进行CMS回收。
·-XX:+CMSIncrementalMode:使用增量模式,比较适合单CPU。增量模式在JDK8中标记为废弃,并且将在JDK9中彻底移除。

1.4.4.与G1回收器相关的参数

·-XX:+UseG1GC:使用G1回收器。
·-XX:MaxGCPauseMillis:设置最大垃圾回收停顿时间。
·-XX:GCPauseIntervalMillis:设置停顿间隔时间。

1.4.5.TLAB相关

·-XX:+UseTLAB:开启TLAB分配。
·-XX:+PrintTLAB(考虑到兼容性问题,JDK 9、JDK 10不再支持此参数):打印TLAB相关分配信息。
·-XX:TLABSize:设置TLAB区域大小。
·-XX:+ResizeTLAB:自动调整TLAB区域大小。

1.4.6.其他参数

·-XX:+DisableExplicitGC:禁用显式GC。
·-XX:+ExplicitGCInvokesConcurrent:使用并发方式处理显式GC。

1.5 GC 日志打印

1.5.1 JDK8 GC 日志打印参数

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseSerialGC -Xmx1m -Xloggc:./gc-serial.log
参数	功能
-XX:+PrintGC	使用这个参数启动Java虚拟机后,只要遇到GC,就会打印日志
-XX:+PrintGCDetails	输出GC的详细日志,参数-XX:+PrintGCDetails还会使虚拟机在退出前打印堆的详细信息,详细信息描述了当前堆的各个区间的使用情况
-XX:+PrintGCTimeStamps	输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps	输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC		在进行GC的前后打印出堆的信息。还可以使用参数-XX:+PrintHeapAtGC(考虑到兼容性,从JDK9开始已经删除此参数,查看堆信息可以使用VisualVM,第6章将会讲述)
-Xloggc:gc.log	日志文件的输出路径

在这里插入图片描述
该日志显示,一共进行了4次GC,每次GC占用一行,在GC前,堆空间使用量约为4MB,在GC后,堆空间使用量为377KB,当前可用的堆空间总和约为16MB(15936KB)。最后,显示的是本次GC所
花的时间。

1.5.2 JDK9、JDK10 GC日志参数

.-XX:+PrintGC(在JDK9、JDK10中建议使用-Xlog:gc),使用这个参数启动Java虚拟机后,只要遇到GC,就会打印日志,JDK9、JDK10默认使用G1作为垃圾回收器,使用参数-Xlog:gc来打印GC日志

-Xlog:gc* 打印GC 日志详情,JDK9、JDK10建议使用-Xlog:gc*

-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息。还可以使用参数-XX:+PrintHeapAtGC(考虑到兼容性,从JDK9开始已经删除此参数,查看堆信息可以使用VisualVM,第6章将会讲述)

在这里插入图片描述
从这个输出中可以看到,系统经历了3次GC,第1次仅为新生代GC,回收的效果是新生代从回收前的8MB左右降低到1MB。整个堆从22MB左右降低到17MB。
第2次(加粗部分)为Full GC,它同时回收了新生代、老年代和永久区。日志显示,新生代在这次GC中没有释放空间(严格来说,这是GC日志的一个小bug,事实上,在这次FullGC完成后,新生代被清空,由于GC日志输出时机的关系,各个版本JDK的日志多少有些不太精确的地方,读者需要留意),老年代从16MB降低到13MB。整个堆大小从26MB左右降低为13MB左右(这个大小完全与老年代
实际大小相等,因此也可以推断,新生代实际上已被清空)。永久区的大小没有变化。日志的最后显示了GC所花的时间,其中user表示用户态CPU耗时,sys表示系统CPU耗时,real表示GC实际经历的时间。

透过日志看垃圾收集器

Serial收集器:新生代显示 “[DefNew”,即 Default New Generation
ParNew收集器:新生代显示“[ParNew”,即 Parallel New Generation Parallel
Scavenge收集器:新生代显示"[PSYoungGen",JDK1.7使用的即PSYoungGen Parallel
Old收集器:老年代显示"[ParoldGen" G1收集器:显示”garbage-first heap“

1.6 GC 日志分析

参考 https://www.cnblogs.com/dtyy/p/15873735.html
参考 https://blog.csdn.net/xyz9353/article/details/119190661

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

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

相关文章

ES的安装以及配置+ik分词

环境:windows10、ES(8.13.3)、Kibana(8.13.3)、Logstash(8.13.3)、ik(8.13.3) 1.下载安装ES Download Elasticsearch | ElasticDownload Elasticsearch or the complet…

四元数学习总结(2)

导语:相比矩阵,用四元数处理3D旋转的优势是毋庸置疑的,但由于概念复杂,难于理解,一直令我摸不着头脑。最近学习更是发现在机器人、无人机、SLAM等先进领域,四元数被当成实数、整数这样的基础,所…

超简单白话文机器学习 - 支持向量机SVM(含算法讲解,公式全解,手写代码实现,调包实现)

1. 支持向量机SVM 支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化&#xff…

学浪的缓存怎么导出来

学浪的缓存导出问题困扰着许多用户,备份和管理数据变得至关重要。在数字化时代,保护和利用数据是企业和个人不可或缺的需求。在这篇文章中,我们将深入探讨学浪缓存导出的方法,为您解决疑惑,让您轻松掌握数据的安全与便…

java:程序包javax. servLet不存在

一.原因 1.项目Tomcat 服务器依赖未导入 2.项目的 SDK 版本选择错误 二.解决方法 方案一: 1.选择项目结构选项 2.导入Tomcat依赖 把tomcat里面的【jsp-api.jar】和【servlet-api.jar】这两个包导入 方案二: 1.选择项目结构选项 2.选择自己的jdk版本…

海外短剧系统源码

随着互联网的普及和全球化的加速,海外短剧系统源码的开发成为了一个新兴的领域。海外短剧,即那些在海外市场流行的短视频剧集,以其短小精悍、节奏快速、内容多样的特点,迅速吸引了全球观众的注意。本文将探讨海外短剧系统源码的开…

反对加征关税,特斯拉上海厂传减产20% | 百能云芯

特斯拉公司首席执行官马斯克近日在公开场合表达了对美国计划对中国电动车加征关税的反对立场,强调特斯拉不支持任何扭曲市场的举措。据知情人士透露,特斯拉上海工厂正计划在今年第二季度至少削减Model Y车型的产量20%,以应对市场需求的变化。…

需求跟踪矩阵是什么?怎么创建?一文详解

一、什么是需求跟踪矩阵 对项目经理或产品经理来说,需求清单肯定不陌生,那什么是需求跟踪矩阵呢? 需求跟踪矩阵(Requirement Track Matrix,简称RTM ),是把产品需求从其来源连接到能满足需求的…

大模型应用之基于Langchain的测试用例生成

一 用例生成实践效果 在组内的日常工作安排中,持续优化测试技术、提高测试效率始终是重点任务。近期,我们在探索实践使用大模型生成测试用例,期望能够借助其强大的自然语言处理能力,自动化地生成更全面和高质量的测试用例。 当前…

MIC工作原理(驻极体麦克风)

1.驻极体麦克风声电转换原理 如图所示,驻极体麦克风属于电容式麦克风,背极板和振膜构成平板版电容器,背极板驻有一定量的电荷,背极板通过金属环连接到FET的栅极;振膜镀层金属,通过金属外壳连接到FET的S极&…

社区矫正程序管理端和小程序(支持人脸识别)

社区矫正作为我国刑事处罚执行方式中独特的种类,从2003年进行试点至今已有近20年的时间,在罪犯改造方面取得了突出成就,在法治国家建设过程中具有十分重要的意义。相较于监狱内服刑的执行方式,社区矫正更加侧重于对服刑人员进行教…

常见web安全漏洞

一、信息泄露 概念 信息泄露是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信 息,如用户名、密码、源代码、服务器信息、配置信息等。 造成信息泄露主要的三个原因: ①Web服务器配置存在问题,导致一些系统…

最详细Linux提权总结(建议收藏)

1、内核漏洞脏牛提权 查看内核版本信息 uname -a 具体提权 1、信息收集配合kali提权 uname -a #查看内核版本信息 内核版本为3.2.78,那我们可以搜索该版本漏洞 searchsploit linux 3.2.78 找到几个可以使用的脏牛提权脚本,这里我使用的是40839.c脚…

锐捷网络与您相约第七届数字中国建设峰会 共话数字未来

第七届数字中国建设峰会将于5月24日至25日在福建福州举办,本届峰会是国家数据工作体系优化调整后首次举办的数字中国建设峰会,主题是“释放数据要素价值,发展新质生产力”。作为行业领先的ICT基础设施及解决方案提供商,锐捷网络与福建省电子信息集团、星网锐捷,围绕“发展新质生…

SpringBoot——发送HTML格式的邮件

目录 项目总结 新建一个SpringBoot项目 pom.xml application.properties配置文件 EmailService服务类 SpringbootMailHtmlApplicationTests测试类 项目总结 在SpringBoot项目中发送HTML格式的邮件的思路: 添加依赖:在项目中添加spring-boot-starte…

Android消息机制回顾(Handler、Looper、MessageQueue源码解析)

回顾: Android消息机制 Android消息机制主要指的是Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作机制。 介绍 通过Handler 消息机制来解决线程之间通信问题,或者用来切换线程。特别是在更新UI界面时,确保了线程间的数…

20232937文兆宇 2023-2024-2 《网络攻防实践》实践十一报告

20232937文兆宇 2023-2024-2 《网络攻防实践》实践十一报告 1.实践内容 木马是一种带有恶意性质的远程控制软件。木马一般分为客户端和服务器端,客户端是本地使用的各种命令的控制台,而服务器端则是要给别人运行,只有运行过服务器端的计算机…

工具:Visual Studio Code

一、VSCode生成exe 二、在vs中断点调试 如果没效果需要安装如下与unity相连接的插件 三、注释 1、代码注释 注释和取消都是都是同一个命令:选中代码,然后按住CtrlShift/ 2、方法或类注释 /// 四、导航 五、将变量注释展示到解释面板 1、直接显示 [Too…

YOLOv8: RuntimeError: DataLoader worker (pid(s) xxxxx) exited unexpectedly

遇到错误: 一、 raise RuntimeError(DataLoader worker (pid(s) {}) exited unexpectedly.format(pids_str)) RuntimeError: DataLoader worker (pid(s) 4252, 17184) exited unexpectedly二、OSError: [WinError 1455] 页面文件太小,无法完成操作。 处…

有趣的css - 水波纹按钮

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是一个好看有质感的水波纹按钮。 最新文章通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 &a…