JVM学习-JVM运行时参数

JVM参数选项
标准参数选项
  • 特点

    • 稳定,后续版本不会变化
    • 以【-】开头
  • 各种选项

    • 运行java或者java -help可以看到所有的标准选项
      在这里插入图片描述
  • 补充内容

    • -server:64位机器上只支持Server模式的JVM,适用于需要大内存的应用程序,默认用并行垃圾回收器
    • -client:在32位Windows系统上,默认使用Client类型的JVM,要想使用Server模式,则机器配置至少有2个以上的CPU和2G以上的物理内存。Client模式适用于对内存要求较小的桌面应用程序,默认使用Serial串行垃圾回收器
-X参数选项
  • 特点

    • 非标准化参数
    • 功能相对稳定,官方说后续可能会变更
    • 以-X开头
  • 各种选项

    • 运行java -X命令可以查看所有的X选项
      在这里插入图片描述
  • JVM的JIT编译模式相关的选项

    • -Xint:禁用JIT,所有字节码都被解释执行,这个模式的速度最慢
    • -Xcomp:所有字节码第一次使用就都被编译成本地代码,然后再执行
    • -Xmixed:混合模式,默认模式,让JIT根据程序的运行情况,有选择地将某些代码
  • 特别

    • -Xms:设置初始Java堆大小,等价于-XX:InitialHeapSize
    • -Xmx:设置最大堆大小,等价于-XX:MaxHeapSize
    • -Xss:设置Java线程堆栈大小,等价于-XX:ThreadStackSize
-XX参数选项
  • 特点
    • 非标准化参数
    • 使用最多的类型
    • 这类选项属于实验性,不稳定
    • 以-XX开头
  • 作用
    • 用于开发和调试JVM
  • 分类
    • Boolean类型
      • -XX:+表示启用option属性
      • -XX:-表示禁用option属性
      • 举例(-XX:+UseParallelGC启用并行收集器,-XX:+UseG1GC启用G1收集器,-XX:+UseAdaptiveSizePolicy自动选择年轻代区大小和相应的Survivor区比例)
      • 有些指令默认是开启的,可以使用-关闭
    • 非Boolean类型(key-value类型)
      • 子类型1:数值型格式-XX:=
      • 子类型2:非数值型格式-XX:=
      • 举例(-XX:NewSize=1024m设置新生代初始大小为1024M,-XX:MaxGCPauseMillis=500 设置GC停顿时间:500毫秒,-XX:GCTimeRatio=19设置吞吐量,-XX:NewRatio=2设置新生代和老年代比例,-XX:HeapDumpPath=/usr/local/heapdump.hprof指定heap转储文件存储位置)
  • 特别
    • -XX:PrintFlagsFinal
      • 输出所有参数的名称和默认值
      • 默认不包括Dignostic和Experimental参数
      • 可以配合-XX:+UnlockDiagnosticVMOptions和-XX:UnlockExperimentalVMOptions使用
添加JVM参数
Eclipse

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

IDEA

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

运行jar包
  • java -Xms500m -Xmx500m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar demo.jar
通过Tomcat运行war包
  • linux系统下,找到tomcat/bin/catalina.sh中添加JAVA_OPTS=“-Xms500m -Xmx500m”
  • windows系统下,找到catalina.bat不添加set “JAVA_OPTS=-Xms500m -Xmx500m”
程序运行过程中
  • 使用jinfo -flag=设置非boolean类型参数
  • 使用jinfo -flag[+|-]设置boolean类型参数
  • 可以修改的参数见
常用的JVM参数
打印设置的XX选项及值
  • -XX:+PrintCommandLineFlags:让程序运行前打印出用户手动设置或者JVM自动设置的XX选项
  • -XX:+PrintFlagsInitial:打印出所有XX选项的默认值
  • -XX:+PrintFlagsFinal:打印出XX选项在运行程序时生效的值
  • -XX:+PrintVMOptions:打印JVM参数
堆、栈、方法区等内存大小设置
    • -Xss128k:每个线程的栈大小为128k
  • 堆内存
    • -Xms1024m:等价于-XX:InitialHeapSize,设置JVM初始堆内存为1024m
    • -Xmx1024m:等价于-XX:MaxHeapSize,设置JVM最大堆内存为1024m
    • -Xmn1g:设置年轻代大小为1G,官方建议设置整个堆大小的3/8
    • -XX:NewSize=1024m:设置年轻代初始值为1024m
    • -XX:MaxNewSize=1024m:设置年轻代最大值为1024m
    • -XX:SurvivorRatio=8:设置年轻代中Eden与一个Survivor区的比值,默认8
    • -XX:UseAdaptiveSizePolicy:自动选择各区大小比例
    • -XX:NewRatio=4:设置老年代与年轻代(包括1个Eden和2个Survivor区)比值
    • -XX:PretenureSizeThreadshold=1024:设置让大于此阈值的对象直接分配在老年代,单位为字节,只对Serial和parNew收集器有效
    • -XX:MaxTenuringThrehold=15
      • 新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的值时进入老年代
      • 默认值15
    • -XX:PrintTenuringDistribution:让JVM每次MinorGC后打印当前使用的Survivor中对象的年龄分布
    • -XX:TargetSurvivorRatio:表示MinorGC结束后Survivor区域中占用空间的期望比例
  • 方法区
    • 永久代
      • -XX:PermSize=256m:设置永久代初始值为256m
      • -XX:MaxPermSize=256m:设置永久代最大值为256m
    • 元空间
      • -XX:MetaspaceSize:初始空间大小
      • -XX:MaxMetaspaceSize:最大空间大小,默认没有限制
      • -XX:UseCompressedOops:压缩对象指针
      • -XX:UseCompressedClassPointers:压缩类指针
      • -XX:UseCompressedSpaceSize:设置Klass Metadata的大小,默认1G
  • 直接内存
    • -XX:MaxDirectMemorySize:指定DirectMemory容量,若未指定,则默认与Java堆最大值一样
OutOfMemory相关选项
  • -XX:HeapDumpOnOutOfMemoryError:内存出现OOM的时候,把Heap转存(dump)到文件方便后续分析
  • -XX:HeapDumpBeforeFullGC:出现FullGC之前,生成Heap转储文件
  • -XX:HeapDumpPath= :指定heap转存文件的存储路径
  • -XX:OnOutOfMemoryError:指定一个可行性程序或者脚本的路径,当发生OOM时,去执行这个脚本
垃圾收集器相关选项
  • 查看默认垃圾收集器
    • -XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)
    • 使用命令行指令:jinfo -flag 相关垃圾收集器参数 进程ID
  • Serial回收器
    • Serial收集器作为Hotspot中Client模式下的默认新生代垃圾收集器,Serial Old是运行在Client模式下默认的老年代垃圾回收器
    • -XX:+UseSerialGC:指定年轻代和老年代都使用串行收集器,等价于新生代使用Serial GC,老年代使用Serial Old GC,可获得最高的单线程收集效率
  • ParNew回收器
    • -XX:+UseParNewGC:手动指定使用ParNew收集器执行内存回收任务,它表示年轻代使用并行收集器,不影响老年代
    • -XX:ParallelGCThreads=N:限制线程数量,默认开启和CPU相同的线程数
  • Parallel回收器
  • CMS回收器
    • JDK9 Deprecate
    • JDK14 Remove
  • G1回收器
  • 如何选择垃圾回收器
GC日志相关选项
其他参数
通过Java代码获取JVM参数

持续更新中… …

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高性能8位单片机 CA51M151,1T 8051内核 / 内置12位ADC / 16 位PWM / 支持触摸 / 8K MTP

CA51M151 系列芯片是基于 1T 8051 内核的 8 位微控制器,不仅保留了传统 8051 芯片的基本特性,通常情况下运行速度比传统的 8051 芯片快 10 倍,性能更加优越。芯片内置 8 KB MTP 程序存储器,256Byte 内部RAM,512Byte 外…

【日常记录】【node】从零开发一个node命令行工具

1、命令行工具 命令行工具(Cmmand Line Interface)简称cli,顾名思义就是在命令行终端中使用的工具。我们常用的 git 、npm、vim 等都是 cli 工具,比如我们可以通过 git clone 等命令简单把远程代码复制到本地。 再比如&#xff1a…

小程序 UI 风格,构建美妙视觉

小程序 UI 风格,构建美妙视觉

Prometheus写入influxDB:中间件remote_storage_adapter

Prometheus写入influxDB:中间件remote_storage_adapter prometheus默认采用的是本地磁盘做数据存储,本地存储的优势就是运维简单但是缺点就是无法海量的metrics持久化和数据存在丢失的风险,数据写入可能造成wal文件损坏导致采集数据无法再写入的问题。 …

使用Zed 实现测距

目录 1. 导入相关库 2. 相机初始化设置 3. 获取中心点深度数据 4. 计算中心点深度值 5. 完整代码 此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面中心点的深度值,为yolo测距打基础。 Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专…

openstack删除实例卡死在正在删除中

删除实例 问题描述解决办法 实验环境;服务器,openstackY版 问题描述 openstack在删除实例时一直显示正在删除中 解决办法 进入数据库修改实例状态,修改为错误,然后重新删除 首先查看对应实例id 进入数据库修改 rootcompute:~…

wx群发机器人.使用指南.

1.打开权限 1.打开下方Dock中 系统偏好设置 2.打开 安全性与隐私 3.打开 辅助功能 4.添加 终端 2.使用指南 1.下载 通讯录-联系人/群聊 1.先打开微信mac版,再打开群发机器人 2.点击下载 3.下载过程中,请不要操作键盘,鼠标 4.中途需停止可将鼠标放置左上角. 5.下载完成后文件…

vivado HW_TARGET

HW_目标 描述 硬件目标hw_target是包含一个或多个JTAG链的系统板 Xilinx FPGA设备,您可以使用比特流文件进行编程,或用于调试您的设计。 系统板上的硬件目标与Vivado Design Suite之间的连接 由硬件服务器对象hw_server管理。 使用open_hw_target命令打开…

Python深度学习基于Tensorflow(16)基于Transformer的对话实例

文章目录 基础数据清洗数据生成词汇表定义分词器并制作数据集构建Transformer模型并训练模型推理 Tensorflow 的核心就是注意力机制,在之前详细的介绍过,具体可以看这个:Python深度学习基于Tensorflow(9)注意力机制_te…

Python 深度学习和机器学习的模型评估库之torchmetrics使用详解

概要 在深度学习和机器学习项目中,模型评估是一个至关重要的环节。为了准确地评估模型的性能,开发者通常需要计算各种指标(metrics),如准确率、精确率、召回率、F1 分数等。torchmetrics 是一个用于 PyTorch 的开源库,提供了一组方便且高效的评估指标计算工具。本文将详…

GIS之arcgis系列10:arcpy实现批量掩膜提取

按掩膜提取 (Spatial Analyst) 提取掩膜所定义区域内的相应栅格像元。 OutRas ExtractByMask(InRas1, InMsk1, "INSIDE") 使用情况 输入栅格中的其他属性(若有的话)将按照原样添加到输出栅格属性表。 根据所记录的属性,某些属性…

【Java并发编程之美 | 第一篇】并发编程线程基础

文章目录 1.并发编程线程基础1.1什么是线程和进程?1.2线程创建与运行1.2.1继承Thread类1.2.2实现Runnable接口1.2.3实现Callable接口(与线程池搭配使用)1.2.4小结 1.3线程常用方法1.3.1线程等待与通知1.3.2线程睡眠1.3.3让出CPU执行权1.3.4线…

EVS9329-ES驱动器EVS9329ES可议价

EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES步进电机按结构分类:步进电动机也叫脉冲电机,包括反应式步进电动…

Unity射击游戏开发教程:(27)创建带有百分比的状态栏

创建带有弹药数和推进器百分比的状态栏 在本文中,我将介绍如何创建带有分数和百分比文本的常规状态栏。 由于 Ammo Bar 将成为 UI 的一部分,因此我们需要向 Canvas 添加一个空的 GameObject 并将其重命名为 AmmoBar。我们需要一个文本和两个图像对象,它们是 AmmoBar 的父级。…

13- 函数的定义与使用+形参实参区分

13- 函数的定义与使用形参实参区分 文章目录 13- 函数的定义与使用形参实参区分一、函数的定义与使用1.1 函数的结构1. 函数头2. 函数体 1.2 示例代码例子 1:无参数和无返回值的函数例子 2:带参数和返回值的函数 1.3 函数的基本语法1.4 函数的使用示例例…

多点液位传感器如何实现连续液位检测

如今,随着液位传感器的不断发展与演进,多点液位传感器也应用而生,可以实现对液体在多个连续点位的精确检测与监控,在洗地机设备上,可以及时了解水量,避免水资源浪费等情况。 多点式光电液位传感器采用了先…

测试记录4:在windows wsl2上配置ubuntu20.04

1.下载ubuntu20.04 (1) 在microsoft store中下载ubuntu20.04 (2) 在powershell中检查ubuntu20.04 wsl --listwsl -l -v安装成功 2.安装界面 见测试记录3 3.安装必要的功能包 sudo apt install zip sudo apt install gedit4.安装ros2 wget http://fishros.com/install -O …

提升你的编程体验:自定义 PyCharm 背景图片

首先,打开 PyCharm 的设置菜单,点击菜单栏中的 File > Settings 来访问设置,也可以通过快捷键 CtrlAItS 打开设置。 然后点击Appearance & Behavior > Appearance。 找到Background image...左键双击进入。 Image:传入自己需要设置…

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加,市场竞争越来越激烈,传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识,在数字化的进程中,中小企业首要考虑生存问题,不能…

什么是场外期权?场外期权有几种做法?

今天带你了解什么是场外期权?场外期权有几种做法?期权分为场内期权,场外期权。场内期权我们都知道,是在期货盘里购买的期权,但场外期权呢? 什么是场外期权? 场外期权是一种在交易所之外进行交易…