JVM常用参数一

news2025/2/26 22:53:18

jvm启动参数

JVM(Java虚拟机)的启动参数是在启动JVM时可以设置的一些命令行参数。这些参数用于指定JVM的运行环境、内存分配、垃圾回收器以及其他选项。以下是一些常见的JVM启动参数:
-Xms:设置JVM的初始堆大小。
-Xmx:设置JVM的最大堆大小。
-Xss:设置每个线程的栈大小。
-XX:MaxMetaspaceSize:设置元空间(在JDK8之后替代了永久代)的最大大小。
-XX:PermSize:设置永久代的初始大小。
-XX:MaxPermSize:设置永久代的最大大小(在JDK8之前使用)。
-XX:NewSize:设置新生代的初始大小。
-XX:MaxNewSize:设置新生代的最大大小。
-XX:SurvivorRatio:设置Eden区和Survivor区的比例。
-XX:+UseParallelGC:使用并行垃圾回收器。
-XX:+UseConcMarkSweepGC:使用并发标记清除垃圾回收器。
-verbose:gc:打印GC日志信息。
-Dproperty=value:设置系统属性。
这些启动参数可以通过在命令行中使用"java"命令时添加参数来设置。例如:"java -Xms256m -Xmx512m -jar myapp.jar"将设置JVM的初始堆大小为256MB,最大堆大小为512MB,并运行名为"myapp.jar"的Java应用程序。

-Xmn:新生代大小
-XX:NewRatio:设置新生代和老年代的比值。
如:为3,表示年轻代与老年代比值为1:3
-XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。
如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5
-XX:MaxTenuringThreshold:设置转入老年代的存活次数。如果是0,则直接跳过新生代进入老年代
-XX:PermSize、-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)
-XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)

参数分类

在这里插入图片描述
在这里插入图片描述

  1. 以 - 开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容,如 -server。
  2. -D 设置系统属性,如 -Dfile.encoding=UTF-8。
  3. 以 -X 开头为非标准参数,基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容。 可以使用 java -X 命令来查看当前 JVM 支持的非标准参数,如 -Xmx8g。
  4. 以 –XX:开头为非稳定参数, 专门用于控制 JVM 的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消。 -XX:±Flags 形式, ± 是对布尔值进行开关,如 -XX:+UseG1GC。 -XX:key=value 形式, 指定某个选项的值,如 -XX:MaxPermSize=256m。

JVM启动参数使用中常见的错误:
java.lang.OutOfMemoryError相信很多开发人员都用到过,这个主要就是JVM参数没有配好引起的,但是这种错误又分两种:java.lang.OutOfMemoryError:Javaheapspace和
java.lang.OutOfMemoryError:PermGenspace,其中前者是有关堆内存的内存溢出,可以同过配置-Xms和-Xmx参数来设置,而后者是有关永久域的内存溢出,可以通过配置-XX:MaxPermSize来设置。

堆内存

在这里插入图片描述
JVM 总内存=堆+栈+非堆+堆外内存

设置堆内存
JVM 的内存设置是最重要的参数设置,也是 GC 分析和调优的重点。JVM 总内存=堆+栈+非堆+堆外内存。

-Xmx:
指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。

-Xms:
指定堆内存空间的初始大小。 如 -Xms4g。 而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才分配。 专用服务器上需要保持 -Xms和-Xmx一致,否则应用刚启动可能就有好几个 FullGC。当两者配置不一致时,堆内存扩容可能会导致性能抖动。

-Xmn:
等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4。

-XX:MaxPermSize=size:
这是 JDK1.7 之前使用的。Java8 默认允许的 Meta 空间无限大,此参数无效。

-XX:MaxMetaspaceSize=size:
Java8 默认不限制 Meta 空间, 一般不允许设置该选项。

XX:MaxDirectMemorySize=size:
系统可以使用的最大堆外内存,这个参数跟-Dsun.nio.MaxDirectMemorySize效果相同。

-Xss:
设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB,与-XX:ThreadStackSize=1m等价
注意:
堆外内存:也就是说不在堆上的内存,我们可以通过jconsole,jvisualvm 等工具查看。对于IBM JVM和Hotspot,都可以通过-XX:MaxDirectMemorySize来设置nio直接缓冲区的最大值。默认是64M。超过这个时,会按照32M自动增大。
系统有大量的地方使用堆外内存,远比我们常说的 xmx 和 xms 包括的范围要广。所以我们需要在设置内存的时候留有余地,一般来说配置系统或容器里可用内存的 70-80% 最好。

GC相关

在这里插入图片描述
-XX:+UseG1GC: 使用 G1 垃圾回收器
-XX:+UseConcMarkSweepGC: 使用 CMS 垃圾回收器
-XX: +UseSerialGC: 使用串行垃圾回收器
-XX: +UseParallelGC: 使用并行垃圾回收器
/ Java 11+
XX: +UnlockExperimentalVMOptions -XX:+UseZGO/ Java 12+
-XX: +UnlockExperimentalVMOptions -XX:+UseShenandoahGO
GC 日志相关的参数
在生产环境或性能压测环境里,我们用来分析和判断问题的重要数据来源之一就是 GC 日志,JVM 启动参数为我们提供了一些用于控制 GC 日志输出的选项。
-verbose:gc :
和其他 GC 参数组合使用, 在 GC 日志中输出详细的GC信息。 包括每次 GC 前后各个内存池的大小,堆内存的大小,提升到老年代的大小,以及消耗的时间。此参数支持在运行过程中动态开关。比如使用 jcmd, jinfo, 以及使用 JMX 技术的其他客户端。

-XX:+PrintGCDetails 和 -XX:+PrintGCTimeStamps:
打印 GC 细节与发生时间。

-Xloggc:file:
与-verbose:gc功能类似,只是将每次 GC 事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。若与 verbose:gc 命令同时出现在命令行中,则以 -Xloggc 为准。

分析诊断

在这里插入图片描述

指定垃圾收集器相关参数
垃圾回收器是 JVM 性能分析和调优的核心内容之一,也是近几个 JDK 版本大力发展和改进的地方。通过不同的 GC 算法和参数组合,配合其他调优手段,我们可以把系统精确校验到性能最佳状态。
以下参数指定具体的垃圾收集器。
-XX:+UseG1GC:使用 G1 垃圾回收器
-XX:+UseConcMarkSweepGC:使用 CMS 垃圾回收器
-XX:+UseSerialGC:使用串行垃圾回收器
-XX:+UseParallelGC:使用并行垃圾回收器

常见问题

1.既然jvm有的非标准参数是无法支持的,那么我们想使用的参数如何查询是否有效支持?

答案就是:java -x

2.以前工作时也碰到过课程视频中所说的,就是我们一个服务命名没有什么用户量,但是总是不断的oom。我们查看GC日志后没有明显的问题,这时候我就就需要看下启动参数了。

我们-xmx配置的最大内存数值一定不要超过本机服务器的80%,而xms也和xmx相同。
否则就没法给一些非堆内存和其他程序留出空间了。一般情况下直接配置60-80%即可,现在服务器一般都是1G起步。

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

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

相关文章

了解CSS中的BFC以及用法

目录 一 常见的定位方案 1. 普通流(所有元素默认为普通流的定位) 2. 浮动 3. 绝对定位 二 BFC 1. 定义 2. 触发条件 3. 作用 (1) 避免外边距重叠 ​(2)清除浮动 (3) 阻…

【知识扫盲】DHCP Server扫盲与作用

DHCP Server在实际应用中非常广泛,它适用于各种规模的网络环境,从小型办公室到大型企业网络,都能发挥重要作用。以下是一些具体的使用场景,用通俗易懂的语言进行解释。 1. 办公室网络环境 在一家公司的办公室里,通常会…

麒麟KOS删除鼠标右键新建菜单里不需要的选项

原文链接:麒麟KOS删除鼠标右键新建菜单里不需要的选项 Hello,大家好啊!在日常使用麒麟KOS操作系统时,我们可能会发现鼠标右键新建菜单里包含了一些不常用或者不需要的选项。这不仅影响我们的使用效率,也让菜单显得杂乱…

基于MPC的自动驾驶泊车控制

基于MPC的自动驾驶泊车控制 H. Ye, H. Jiang, S. Ma, B. Tang, and L. Wahab, “Linear model predictive control of automatic parking path tracking with soft constraints,” International Journal of Advanced Robotic Systems, vol. 16, no. 3, p. 附赠自动驾驶学习资…

Qt之QSS样式表

QSS简介 QSS(Qt Style Sheet)样式表是一种用于描述图形用户界面(GUI)样式的语言。它允许开发者为应用程序的控件定义视觉外观,例如颜色、字体、尺寸和布局等。 QSS 样式表的主要目的是提供一种简洁而灵活的方式来美化…

NzN的数据结构--栈的实现

在前面我们已经学习了哪些线性数据结构呢?大家一起来回顾一下:C语言学过的数组,数据结构中的线性表和顺序表和链表。那我们今天再来介绍数据结构里的两个线性结构--栈和队列。 目录 一、栈的概念及结构 二、用数组实现栈 1. 栈的初始化和…

Linux内核中常用的C语言技巧

Linux内核采用的是GCC编译器,GCC编译器除了支持ANSI C,还支持GNU C。在Linux内核中,许多地方都使用了GNU C语言的扩展特性,如typeof、__attribute__、__aligned、__builtin_等,这些都是GNU C语言的特性。 typeof 下面…

Web 前端性能优化之七:数据存储与缓存技术

7、数据存储 在开发Web应用的过程中,会涉及一些数据的存储需求,常见的存储方式可能有: 保存登录态的Cookie; 使用浏览器本地存储进行保存的Local Storage和Session Storage; 客户端数据持久化存储方案涉及的Web SQ…

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是,蓝色背景的画面,需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的,需要新的部件与之般配。 首先新建一个QDoubleSpinBox,并定义其背景色和边框: QDoubleSpinBox { color: white; border:1px…

光学雨量计红外雨量传感器应用于小型气象站

光学雨量计红外雨量传感器应用于小型气象站 随着气候变化对人类生活和农业生产的影响越来越大,气象观测设备的需求也逐渐增加。其中一种常见的气象观测设备是雨量计,用于监测降水量。在小型气象站中,光学雨量计红外雨量传感器被广泛应用。 …

数据库知识点汇总(最全!,2024年最新大佬分享开发经验

十九、删除数据 DELETE 语句 使用 DELETE 语句从表中删除数据。 DELETE FROM table [WHERE condition]; 删除数据 使用 WHERE 子句删除指定的记录 DELETE FROM departments WHERE department_name ‘Finance’; 如果省略 WHERE 子句,则表中的全部数据将被删除 DELE…

ai智能问答免费API接口

智能对话API接口,可以为网站或其他产品提供强大的智能交互功能,无需自行开发复杂的语义分析和自然语言处理算法。这使得开发者能够更专注于产品的核心功能和用户体验,加速产品上线速度并降低开发成本。 智能对话API接口的功能还包括对话内容…

CentOS安装MeterSphere并实现无公网IP远程访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

VS运行.netcore项目,一般情况下都是用localhost访问,怎么做到用IP地址访问,步骤详解

一、问题描述 通常情况下运行起来都是这样 运行后效果 怎么做到下面这样呢? 二、解决办法 vs把项目运行起来之后,在电脑的右下角有一个图标,右键它 点击其中一个 进入applicationhost.config文件

Golang | Leetcode Golang题解之第14题最长公共前缀

题目&#xff1a; 题解&#xff1a; func longestCommonPrefix(strs []string) string {if len(strs) 0 {return ""}isCommonPrefix : func(length int) bool {str0, count : strs[0][:length], len(strs)for i : 1; i < count; i {if strs[i][:length] ! str0 …

用树莓派监测地震?

监测人类活动和地质活动对地球的影响是 Raspberry Shake 在全球取得的一项成功。 Raspberry Shake 的目标是建立一个让公民科学家也能使用的专业级地震仪。现在&#xff0c;他们在全球安装了数千台基于 Raspberry Pi 的高灵敏度仪器&#xff0c;为前沿研究提供动力。 解决方案…

Facial Micro-Expression Recognition Based on DeepLocal-Holistic Network 阅读笔记

中科院王老师团队的工作&#xff0c;用于做微表情识别。 摘要&#xff1a; Toimprove the efficiency of micro-expression feature extraction,inspired by the psychological studyof attentional resource allocation for micro-expression cognition,we propose a deep loc…

IDEA中无法保存设置 Cannot Save Settings

确定原因: 在IDEA中父工程不应该存在有子工程的相关东西 首先,这是我的DCYJ项目(观察右侧的Content Root) 其次,这是我的EAPOFode项目(观察右侧的Content Root爆红处) 最后我将DCYJ项目右侧的Content Root全部删掉