JVM学习-JVM运行时参数

news2024/9/20 22:52:26
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参数

持续更新中… …

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

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

相关文章

【微信小程序】事件传参的两种方式

文章目录 1.什么是事件传参2.data-*方式传参3.mark自定义数据 1.什么是事件传参 事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参 在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在…

【前端】使用window.print() 前端实现网页打印详细教程(含代码示例)

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

云服务平台仿真-身份认证/授权/申请和释放IT资源[云计算3]

实验名称 云服务平台仿真--身份认证/授权/申请和释放IT资源 实验目的 通过CloudSim仿真,熟悉云服务平台的构建。通过CloudSim仿真,熟悉各种云机制在云服务中的实现原理。 实验原理 CloudSim可以模拟云服务的各类底层方法。在省略技术细节的前提下&a…

tkinter菜单栏

tkinter菜单栏 菜单栏效果代码 菜单栏 在 Tkinter 中,Menu 组件用于创建菜单栏、下拉菜单和上下文菜单,是构建图形用户界面(GUI)应用程序的常见需求。 效果 代码 import tkinter as tk from tkinter import messagebox# 创建主…

linux安装jdk + docker+dockercompose+aliyunACR

下载安装包 链接:https://pan.baidu.com/s/1AyFvPA5qwy4IxfZoTQohrQ 提取码:6666 安装jdk jdk-8u411-linux-x64.tar.gz 链接:https://pan.baidu.com/s/1BZ7J4L5PY-9nuQyxBMDGTA 提取码:6666 1、解压jdk tar -xvf jdk-8u411-li…

上市公司短视主义数据集(2001-2022年)

数据简介:上市公司短视主义是指公司管理层过于关注短期业绩和股价表现,而忽视公司的长期发展和战略规划。这种短视行为可能会导致公司投资决策的失误,影响公司的长期竞争力。 在上市公司年度报告年度中,通过已有的反映管理者“短…

SpringBoot的Mybatis-plus实战之基础知识

文章目录 MybatisPlus 介绍一、MyBatisPlus 集成步骤第一步、引入依赖第二步、定义mapper 二、注解TableNameTableldTableField 三、配置文件四、加解密实现步骤 在SpringBoot项目中使用Mybatis-plus,记录下来,方便备查。 MybatisPlus 介绍 为简化开发而…

C语言 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】

博客主页:花果山~程序猿-CSDN博客 文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一.配置开发环境 二…

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册 晨控CK-UR12-E01 是天线一体式超高频读写器头,工作频率默认为902MHz~928MHz,符合EPC Global Class l Gen 2/IS0-18000-6C 标准,最大输出功率 33dBm。读卡器同时…

41 mysql subquery 的实现

前言 sub query 是一个我们经常会使用到的一个 用法 我们这里 看一看各个场景下面的 sub query 的相关处理 查看 本文, 需要 先看一下 join 的相关处理 测试数据表如下, 两张测试表, tz_test, tz_test03, 表结构 一致 CREATE TABLE tz_test (id int(11) unsigned NOT NUL…

HTML静态网页成品作业(HTML+CSS)—— 名人霍金介绍网页(6个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有6个页面。 二、作品演示 三、代…

千万别买BBA 有40万+预算冲它就对了

文 | Auto芯球 作者 | 擎天 如果现在买BBA 不是纯纯大冤种吗? 有钱就无脑冲M9啊 不然肯定会后悔 这话说给所有有40万预算的朋友听 别不信 今天我才看到一组数据 从4月29号到6月2号 短短五周时间 问界M9就卖了1.82万辆 在40万以上的国产车中遥遥领先 比…

ChatTTS改良版 - 新增精选高品质音色,新增超长文本推理,新增api接口

这个版本是ChatTTS的一个分支,基于ChatTTS修改,由6drf21e大佬改良,大佬GitHub地址 GitHub - 6drf21e/ChatTTS_colab: 🚀 一键部署(含离线整合包)!基于 ChatTTS ,支持音色抽卡、长音频…

港中文斯坦福提出SD加速模型PCM,一步即可生成图像和视频,可直接与SD1.5,SDXL,AnimateLCM结合!

又有新的SD加速模型可以用了,PCM解决了原来LCM模型的各种问题。并且对 AnimateLCM 也做了优化,用PCM直接生成动画也可以保证质量了。 PCM从这三个角度说明了LCM的设计空间是有限的并很好地解决了这些限制。 PCM主要改善了三个LCM原有的问题:…

【Labview】通过串口通信从上位机读取和写入数据

最近博主需要通过Labview的上位机控制一个温控仪表,主要实现在上位机读取实时温度和设定的目标温度,以及通过上位机设定目标温度。这里将其中遇到的问题和心得分享给大家,博主自己也做一个记录。 由于温控仪表采用的485通讯,modb…

阿里云邮件推送服务配置教程:怎么做批发?

阿里云邮件推送的API配置步骤?配置教程有哪些步骤? 阿里云邮件推送服务凭借其高并发、稳定性强和安全性高等特点,成为众多企业的首选。Aok将详细介绍如何使用阿里云邮件推送服务进行批发配置,并简要提及AokSend的优势。 阿里云邮…

DeepSORT(目标跟踪算法)中的数值表格与调参的关系

DeepSORT(目标跟踪算法)中的数值表格与调参的关系 flyfish DeepSORT(目标跟踪算法)中的马氏距离详解(很详细) DeepSORT(目标跟踪算法)中 可以设置阈值进行异常检测或目标跟踪的原…

Xilinx(AMD) vivado对FPGA网表文件进行功能仿真的方法

1 概述 在FPGA开发中很多商用IP核出于知识产权保护的目的,不提供源代码,而是提供综合后的FPGA网表。由于没有源代码,也无法对网表文件直接进行仿真的操作来验证功能,此时需要独立的仿真模型文件。 本文介绍在Xilinx(AMD) vivado软…

阻塞队列和线程池

一、什么是阻塞队列 1.1 什么是队列 队列是先进先出。 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队…

数据可视化Python实现超详解【数据分析】

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…