JVM--基础--24.1--参数

2023-10-30

JVM–基础–24.1–参数


1、常用参数

1.1、-Xms

  1. 初始堆大小
  2. 默认值:物理内存的1/64(<1GB)
  3. 默认空余堆内存小于40%时,JVM就会增大堆,直到-Xmx的最大限制。
    1. 可以通过MinHeapFreeRatio参数可以调整

1.2、-Xms

  1. 最大堆大小
  2. 默认值:物理内存的1/4(<1GB)
  3. 默认空余堆内存大于70%时,JVM会减少堆,直到-Xms的最小限制
    1. 可以通过MaxHeapFreeRatio参数可以调整

1.3、-Xmn

  1. 年轻代大小(1.4or lator)
  2. 此处的大小是eden+from+to
  3. 推荐配置:整个堆的3/8
  4. 注意
    1. 整个堆大小=年轻代大小 + 年老代大小
    2. 增大年轻代后,将会减小年老代大小,此值对系统性能影响较大。

1.4、-Xss

  1. 设置单个线程栈大小
  2. JDK1.5+中默认是1M
  3. 相同物理内存下,减小这个值能生成更多的线程,但是操作系统对一个进程内的线程数还是有限制的,不能无限生成。
    1. 小的应用:建议 128k
    2. 大的应用:建议 256k
  4. 这个选项对性能影响比较大,需要严格的测试。

1.5、-XX:ThreadStackSize

  1. 线程栈的大小
  2. Xss=ThreadStackSize

1.6、-XX:NewRatio

  1. 年轻代(包括Eden和两个Survivor区)与年老代的比值
  2. -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
  3. Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。

1.7、-XX:SurvivorRatio

  1. Eden区与Survivor区的大小比值
  2. 默认:8,也就是Eden:from:to=8:1:1

1.8、-XX:LargePageSizeInBytes

  1. 内存页的大小
  2. 不可设置过大,会影响Perm的大小
  3. 默认:128m

1.9、-XX:+UseFastAccessorMethods

  1. 原始类型的快速优化
  2. get,set 方法转成本地代码(对于jvm来说是冗余代码,jvm将进行优化)

1.11、-XX:+DisableExplicitGC

禁止显式执行GC,不允许通过代码来触发GC。

1.11、-XX:MaxTenuringThreshold

  1. 垃圾最大年龄
  2. 如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代, 对于年老代比较多的应用,可以提高效率。
  3. 如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率
  4. 该参数只有在串行GC时才有效。

1.12、-XX:+UseBiasedLocking

  1. 禁用偏向锁
  2. 在存在大量锁对象的创建并高度并发的环境下禁用偏向锁能够带来一定的性能优化

1.13、-Xnoclassgc

禁用垃圾回收

1.14、-XX:SoftRefLRUPolicyMSPerMB

  1. 每兆堆空闲空间中SoftReference的存活时间
  2. 默认值:1s

1.15、-XX:PretenureSizeThreshold

  1. 对象超过多大时,直接在老年代分配
  2. 默认:0
  3. 单位字节
  4. 新生代采用Parallel Scavenge GC时无效

1.16、-XX:TLABWasteTargetPercent

  1. TLAB占eden区的百分比
  2. 默认:1%

1.17、-XX:+CollectGen0First

  1. FullGC时是否先YGC
  2. 默认:false

2、并行收集器 参数

2.1、-XX:+UseParallelGC

  1. 使用Parallel收集器
  2. 可以同时并行多个垃圾收集线程,但此时用户线程必须停止。
  3. 此配置仅对年轻代有效,即上述配置下
    1. 年轻代使用并发收集
    2. 年老代仍旧使用串行收集
  4. 不能和CMS gc 一起使用

2.2、-XX:+UseParNewGC

  1. 设置年轻代为并行收集,是 UseParallelGC 的升级版本, 有更好的性能或者优点
  2. 可与CMS收集同时使用
  3. JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值

2.3、-XX:ParallelGCThreads

  1. 并行收集器的线程数
  2. 此值最好配置与处理器数目相等
  3. 适用于CMS

2.4、-XX:+UseParallelOldGC

  1. 老年代垃圾收集方式为并行收集(Parallel Compacting)

2.4、-XX:MaxGCPauseMillis

  1. 控制最大垃圾收集停顿时间(毫秒),收集器尽可能的保证每次垃圾收集耗费的时间不超过这个设定值
    1. 如果这个这个值设定的过小,那么Parallel Scavenge收集器为了保证每次垃圾收集的时间不超过这个限定值,会导致垃圾收集的次数增加和增加年轻代的空间大小,垃圾收集的吞吐量也会随之下降。
  2. XX:MaxGCPauseMillis设置的越小,吞吐量则必然越小。

2.5、-XX:+UseAdaptiveSizePolicy

  1. 自动设置 新生代的大小、Eden与Survivor区的比例,晋升老年代对象年龄等细节参数
  2. 设置此选项后,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式称为GC自适应的调节策略(GC Ergonomics)
  3. 只需要把基本的内存数据设置好(如-Xmx设置最大堆),然后使用MaxGVPauseMillis参数或GCTimeRation参数给虚拟机设立一个优化目标,JVM会自动调节其他优化参数.
  4. 自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别
  5. 使用并行收集器时,建议一直打开
  6. 对于面向外部的大流量、低延迟系统,不建议启用此参数,建议关闭该参数

2.6、-XX:GCTimeRatio

  1. 设置垃圾收集时间占系统运行时间的百分比(>0,<100)
    1. 如果把值设置为19,即系统运行时间 : GC收集时间 = 19 : 1,那么GC收集时间就占用了总时间的5%【1 / (19 + 1) = 5%】
  2. 默认值为99,即最大允许1%的垃圾收集时间

2.7、-XX:+ScavengeBeforeFullGC

  1. Full GC前调用 年轻代GC
  2. 默认:true

3、CMS 参数

3.1、-XX:+UseConcMarkSweepGC

  1. 使用CMS内存收集

3.2、-XX:+AggressiveHeap

  1. 会检测主机的资源(内存大小、处理器数量),然后调整相关的参数,使得长时间运行的、内存申请密集的任务能够以最佳状态运行
  2. 该选项最初是为拥有大量内存和很多处理器的主机而设计的,但是从J2SE1.4.1以及其后继版本来看,即使是对于那些只有4颗CPU的主机,该选项都是很有帮助的,因此,吞吐收集器(-XX:+UseParallelGC)、大小自适应(-XX:+UseAdaptiveSizePolicy)以及本选项(-XX:+AggressiveHeap)经常结合在一起使用。
  3. 要使用本选项,主机上至少要有256M的物理内存

3.3、-XX:CMSFullGCsBeforeCompaction

  1. 多少次GC后进行一次碎片整理
  2. 由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低,此值设置运行多少次GC以后对内存空间进行压缩,整理。

3.4、-XX:+CMSParallelRemarkEnabled

降低标记停顿

3.5、-XX+UseCMSCompactAtFullCollection

  1. 在FULL GC的时候,对年老代进行一次碎片整理;整理过程是独占的,会引起停顿时间变长。
  2. CMS是不会移动内存的,因此,这个非常容易产生碎片,导致内存不够用,因此,内存的压缩这个时候就会被启用。
  3. 增加这个参数是个好习惯。
  4. 可能会影响性能,但是可以消除碎片

3.6、-XX:+UseCMSInitiatingOccupancyOnly

  1. 使用手动定义初始化定义开始CMS收集
  2. 禁止hostspot自行触发CMS GC

3.7、-XX:CMSInitiatingOccupancyFraction=70

  1. 指定设定的回收阈值(这里是70)
  2. 如果不指定,JVM仅在第一次使用设定值,后续则会根据运行时采集的数据做自动调整。
  3. 如果指定了该参数,那么每次JVM都会在到达规定设定值时才进行GC
  4. 默认:92
  5. 不过大多数情况下,JVM都能够作出更好的垃圾收集决策,所以如果不是很有信心的话,不建议使用该参数,放心的把决定权交给JVM。

3.8、-XX:CMSInitiatingPermOccupancyFraction

  1. 设置永久代使用到达多少比率时触发GC
  2. 默认:92

3.9、-XX:+CMSIncrementalMode

  1. 用增量式的标记方式,减少标记时应用停顿时间
  2. 用于单CPU情况

3.10、-XX:ParallelCMSThreads

设定CMS的线程数量(一般情况约等于可用CPU数量) 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM--基础--24.1--参数 的相关文章

  • Eclipse 自动完成更改变量名称

    只是一个愚蠢的问题 但很难搜索 因为有很多关于 Eclipse 自动完成的主题 而且很难找到与我的问题匹配的内容 所以问题是 如果我写 MyClass MyVarName 然后按空格键 添加 new MyClass Eclipse 自动添加
  • 警告:跳过条目,因为它不是绝对 URI。 NetBeans 中的 GlassFish

    我成功安装了 GlassFish 但是 当我启动服务器时 我收到两条警告消息 警告 跳过条目 因为它不是绝对 URI 那是关于什么的 Launching GlassFish on Felix platform Aug 09 2014 10
  • Java 9 中可以使用提前编译吗?

    As per JEP 295 http openjdk java net jeps 295 任何 JDK 模块 类或用户代码的 AOT 编译都是实验性的 JDK 9 中不支持 要使用 AOT 化的 java base 模块 用户必须编译该模
  • 在 Java 中填充布尔数组

    作为一名相当新手的 Java 程序员 我给自己设定了一个艰巨的挑战 尝试编写一个简单的文本冒险 不出所料 我已经遇到了困难 我试图为我的 Location 类提供一个属性来存储它包含的退出 我为此使用了一个布尔数组 本质上保存代表每个出口的
  • Java byte[] 与 String 之间的转换

    为什么这个junit测试失败了 import org junit Assert import org junit Test import java io UnsupportedEncodingException public class T
  • 适用于 Solaris 的 Java 8 中缺少 javaws

    看起来 Oracle 从 Java 8 for Solaris 中删除了 Java Web Start javaws 在 Java 8u51 中不再可用 来自兼容性指南 http www oracle com technetwork jav
  • Jodatime 日期格式

    是否可以格式化 JodaTime 日期 这是代码 private static LocalDate priorDay LocalDate date1 do date1 date1 plusDays 1 while date1 getDayO
  • Spring 术语中命令、表单、业务和实体对象之间的区别?

    我试图理解这些对象在松散耦合系统方面的差异 业务对象与实体对象相同吗 我可以使用 MVC 中的业务或实体对象作为我的命令对象吗 命令对象与表单对象相同吗 只是寻找 Spring 术语和用法中对象类型的说明 我在 stackoverflow
  • Java 反射:如何检索匿名内部类?

    我在另一个类中有一个匿名内部类 SomeClass Both SomeClass class getClasses and SomeClass class getDeclaredClasses 返回空数组 我在中找不到一些关于此的提示Cla
  • 使用 CrudRepository 进行自定义查询

    我想使用 CrudRepository 自定义查询 这是我的代码 Repository public interface CustomerRepository extends CrudRepository
  • Java .split("|") 不工作

    我刚刚遇到了一个问题分割法 http docs oracle com javase 6 docs api java lang String html split 28java lang String 29for 字符串不适用于字符 作为一个
  • 如何告诉 IntelliJ 使用 Java 1.6 JDK 启动 gradle?

    一个简单的问题 即使经过几个小时的尝试和搜索 我也无法弄清楚 我安装了 Java 6 和 7 如何告诉 IntelliJ 使用 JDK 版本 1 6 启动 Gradle 构建 无论我做什么 IntelliJ 都会以以下方式开始我的 grad
  • Apache HttpClient TCP Keep-Alive(套接字保持活动)

    我的 http 请求需要太多时间才能被服务器处理 大约 5 分钟 由于连接闲置 5 分钟 代理服务器将关闭连接 我正在尝试在 Apache DefaultHttpClient 中使用 TCP Keep Alive 来使连接长时间处于活动状态
  • Checkstyle - 方法按修饰符排序

    是否可以添加到 checkstyle 规则以按修饰符对类中的方法进行排序 我的意思是开头的公共方法和最后的私有方法 MethodsOrderCheck做这个工作 检查文档 https www qulice com qulice checks
  • 如何配置嵌入式 MongoDB 以在 Spring Boot 应用程序中进行集成测试?

    我有一个相当简单的 Spring Boot 应用程序 它公开一个小型 REST API 并从 MongoDB 实例检索数据 对 MongoDB 实例的查询通过基于 Spring Data 的存储库 下面的一些关键代码 Main applic
  • Java 相当于 Python 的 urllib.urlencode(基于 HashMap 的 UrlEncode)

    From https stackoverflow com questions 2018026 should i use urllib or urllib2 2018103 2018103 Java 中 Python 的 urllib url
  • Drools:为什么是无状态会话?

    Drools 使用会话来存储运行时数据 为此 有两种会话 无状态和有状态 与无状态会话相比 有状态会话允许迭代调用 并且似乎比无状态会话具有所有优势 那么为什么会有无状态会话呢 他们服务的目的是什么 与有状态会话相比 它们的优势是什么 谢谢
  • 如何隐藏或删除 Android HoneyComb 中的状态栏?

    如何隐藏或删除 Android HoneyComb 中的状态栏 每次运行应用程序时 我都会发现某些内容必须被状态栏覆盖 我尝试改变AndroidManifest xml 但没有任何改变 你不知道 它被认为是永久的屏幕装饰 就像电容式主页 菜
  • 升级到 Tomcat 8 时出现 ClassNotFoundException

    我最近将 NetBeans IDE 从 v7 3 升级到 v8 突然我的应用程序在连接到数据库时在服务器启动时抛出异常 这两个版本的 IDE 之间的唯一区别是后者使用 Tomcat 8 异常日志 javax naming NamingExc
  • 如何在 Servlet 中打开弹出窗口,然后重定向页面

    我想在调用 servlet 时打开一个弹出窗口 然后想将 servlet 重定向到某个 jsp page 这就是我所做的 protected void doGet HttpServletRequest request HttpServlet

随机推荐

  • vue2-vant组件库-van-search获取焦点方法

    vue2 vant组件库 van search获取焦点方法 场景 1 进入搜索页时 搜索输入框自动获取焦点 2 点击历史记录 搜索输入框自动获取焦点 思路 1 通过在van search组件标签通过ref获取输入框的dom元素 2 在进入页
  • python 关于Max retries exceeded with url 的错误

    在爬取boss直聘时出现这种错误 于是搜索了网上很多文章 总结如下 1 http连接太多没有关闭导致的 解决方法 import requests requests adapters DEFAULT RETRIES 5 增加重连次数 s re
  • 基于Arduino实现简单人体红外感应灯(人体红外传感器+LED)

    这是一个使用arduino以及人体红外传感器实现的人体感应灯 详细细节如下 1 实验元件 UNO 实验套装 arduino控制板 USB数据线 面包板 跳线 人体红外传感器1个 led灯1个 电阻 220欧 1个 2 实现连接图 如图 这是
  • 后缀–ize_动词后加ize的后缀有什么作用

    展开全部 动词后加ize的后缀的作用是将原有的动词意思变为使动状态 即使成 状态 使e69da5e6ba903231313335323631343130323136353331333431376632 化 后缀 ize ise含义 来源和词
  • C语言基础入门48篇_21_定义和使用自己的函数(函数结构:输入参数-->实现功能-->返回值,类似数学中函数、参数可以多种、返回值一种类型、函数声明与实现、#include语句本质是复制粘贴)

    定义和使用自己的函数 函数结构可以总结为 输入参数 gt 实现功能 gt 返回值 1 函数的实现的基本语法 返回值类型 函数名称 形参列表 函数体语句 如我们之前所定义的判断数字奇偶的函数 int IsEvenNumber int nNum
  • pandas之删除缺失值dropna()

    import numpy as np import pandas as pd s pd Series 12 33 45 23 np nan np nan 66 54 np nan 99 df pd DataFrame value1 12 3
  • Java必知必会的常用类库

    阅读文本大概需要3分钟 Java是一个开源的世界 如果你不懂的在网上寻找适合的轮子 而是经常避免造成 你将无法再代码的泥潭里解脱出来 但是这也不是一概而论的 初学者需要造轮子的能力 而熟练开发者需要改轮子的能力 精通者需要发现轮子的能力 今
  • 大数据与人工智能的关系,不少于500字

    大数据与人工智能是密切相关的两个领域 大数据指的是海量 高增长率和多样化的数据 它可以来自各种不同的来源 如社交媒体 传感器 互联网 电子商务等 而人工智能则是计算机科学的一个分支 研究如何让计算机模拟或增强人类的智能 大数据和人工智能的关
  • 印刷业MES系统解决方案

    印刷业症结所在 1 不能实时准确的跟踪每一批订单的的生产进度 包括各工序的进度 2 印刷报价混乱 没有一个标准的报价参考 很难确保报价的准确性 3 不能有效控制产品加工的成本 没有电脑辅助计算 或者软件不具有计算工单成本的情况下 在开工单时
  • idea快速实现接口

    1 创建接口 public class TestI int getA 2 实现类 alt enter
  • 新词发现方法,新词发现算法有哪些,热词的发现方法,互联网热词挖掘方法

    1 新词发现方法 1 从大数据中抽取 通过抓取互联网上的海量语料 利用统计模型和自然语言处理技术 挖掘新的高频单词或词组 比如Google的Ngram Viewer 2 基于社交媒体的新词发现 通过分析社交媒体平台上的大量用户互动记录 挖掘
  • UMG主菜单切换到场景中的问题解决

    链接来自UE4官方文档 https docs unrealengine com zh CN Engine UMG HowTo CreateMainMenu index html 只说问题 1 OptionMenu必须成为一个变量 否则没法在
  • ciscn login

    这是去年国赛一道签到题 当时没做出来 现在来复现一下 一 查看保护 保护全开 二 逆向分析 main void fastcall noreturn main int64 a1 char a2 char a3 char s 1032 rsp
  • 报错:Keil5执行文件之后显示Target not created

    报错 Keil5执行文件之后显示Target not created 分析 Keil中出现Target not created 原因主要有 1 编译时出错 比如语法错误 变量未定义 2 连接时出错 比如调用外部函数 而由缺少相应的OBJ文件
  • Unity委托,事件(抄录)

    什么是委托 C 中的委托 Delegate 类似于 C 或 C 中函数的指针 委托 Delegate 是存有对某个方法的引用的一种引用类型变量 引用可在运行时被改变 事件在任何位置声明 委托 Delegate 特别用于实现事件和回调方法 所
  • JAVA+Spring踩坑系列之 微服务测试环境联调

    注意事项如下 1 配置文件 线上配置图一默认的 bootstrap 后面的关键字如online onlinetest与图二的spring profiles active字段对应 默认走bootstrap的配置 具体图二的spring clo
  • 在二叉树中找到一个节点的后继节点

    题目 现在有一种新的二叉树节点类型如下 public class Node public int value public Node left public Node right public Node parent public Node
  • Model-Agnostic Meta-Learning (MAML) 理解

    模型不可知元学习 Model Agnostic Meta Learning MAML 的目标是使模型每次的梯度更新更有效 提升模型的学习效率 泛化能力等 它可以被看做一种对模型进行预训练的方法 适用于小样本学习 原文 http procee
  • 学生选课管理信息系统

    文件下载地址 https download csdn net download axiebuzhen 10895062 1 业务描述 设计本系统 模拟学生选课的部分管理功能 学生入校注册后需统一记录学生个人基本信息 对于面向学生开设的相关课
  • JVM--基础--24.1--参数

    JVM 基础 24 1 参数 1 常用参数 1 1 Xms 初始堆大小 默认值 物理内存的1 64 lt 1GB 默认空余堆内存小于40 时 JVM就会增大堆 直到 Xmx的最大限制 可以通过MinHeapFreeRatio参数可以调整 1