首页 > 系统相关 >JVM内存参数的学习之三

JVM内存参数的学习之三

时间:2023-12-21 18:34:05浏览次数:38  
标签:MB 之三 75.0 MinHeapFreeRatio XX MaxHeapFreeRatio 内存 JVM 100

JVM内存参数的学习之三


背景

研究启动性能时, 顺便看到了jmap -heap 1 的部分信息
看到:
MinHeapFreeRatio、MaxHeapFreeRatio
自己突然以为是 Percentage的参数, 恍惚了好久. 
才发现自己对内存的学习不够, 所以想多学习一下. 

参数解释

MinHeapFreeRatio: 
空闲堆空间的最小百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,
值的区间为0到100,默认值为 40。如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后。

MaxHeapFreeRatio : 
空闲堆空间的最大百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,
值的区间为0到100,默认值为 70。如果HeapFreeRatio > MaxHeapFreeRatio,则需要进行堆缩容,缩容的时机应该在每次垃圾回收之后。

来源: 
https://blog.csdn.net/claram/article/details/104635114

参数默认值

如果启动参数为: 
"-XX:MaxRAMPercentage=80.0","-XX:MinRAMPercentage=50.0"
参数值应该是默认的: 
Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 25891438592 (24692.0MB)
   NewSize                  = 169148416 (161.3125MB)
   MaxNewSize               = 8630435840 (8230.625MB)
   OldSize                  = 338362368 (322.6875MB)

如果关闭自适应的话:
"-XX:-UseAdaptiveSizePolicy","-XX:MaxRAMPercentage=80.0","-XX:MinRAMPercentage=50.0"
发现这个参数值并不会发生变化
   Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 25891438592 (24692.0MB)
   NewSize                  = 169148416 (161.3125MB)
   MaxNewSize               = 8630435840 (8230.625MB)
   OldSize                  = 338362368 (322.6875MB)

增加初始化的设置时
"-XX:InitialRAMPercentage=75.0","-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0"
Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 22548578304 (21504.0MB)
   NewSize                  = 7516192768 (7168.0MB)
   MaxNewSize               = 7516192768 (7168.0MB)
   OldSize                  = 15032385536 (14336.0MB)

感觉增加初始化 InitialRAMPercentage 非常管用,会自动分配堆区设置, 并且能够将old区域 固定下来. 


如果不设置 InitialRAMPercentage时
"-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0"
Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 22548578304 (21504.0MB)
   NewSize                  = 234881024 (224.0MB)
   MaxNewSize               = 11274289152 (10752.0MB)
   OldSize                  = 234881024 (224.0MB)
但是这个时候内存的分配不是严格的 1:2配比的new和old   old区域一开始很小.  感觉这样并不是很优秀. 

可以增加几个内存参数对象的变量设置. 
"-XX:InitialRAMPercentage=75.0","-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0","-XX:SurvivorRatio=3","-XX:NewRatio=1"
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 22548578304 (21504.0MB)
   NewSize                  = 11274289152 (10752.0MB)
   MaxNewSize               = 11274289152 (10752.0MB)
   OldSize                  = 11274289152 (10752.0MB)

标签:MB,之三,75.0,MinHeapFreeRatio,XX,MaxHeapFreeRatio,内存,JVM,100
From: https://www.cnblogs.com/jinanxiaolaohu/p/17919838.html

相关文章

  • ThreadLocal的内存泄露?什么原因?如何避免?
    前言在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露、强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这样情况发生,增强系统的健壮性。内存泄露内存泄露为程序在申请内存后,无法释放已申请的内存空间,一......
  • c# 32位程序突破2G内存限制
    起因在开发过程中,由于某些COM组件只能在32位程序下运行,程序不得不在X86平台下生成。而X86的32位程序默认内存大小被限制在2G。由于程序中可能存在大数量处理,期间对象若没有及时释放或则回收,内存占用达到了1.2G左右,就会引发异常“内存溢出”。环境:VisualStudio2022问题复现 ......
  • 来领奖了,InfiniCloud网盘又能领取内存了
    1缘由今天登录自己的邮箱,整理相关的邮件的时候,突然发现有来自于infiniCloud的邮件,阅读邮件竟然发现了一个惊喜,为庆祝HappyHolidays!,用户就是能领取3GB的储存空间,有效期是一年的时间,对于免费用户来说这就很不错了。#HappyHolidays!ClickbelowforaholidaybonusfromI......
  • JVM虚拟机系统性学习-JVM相关工具jps、jstat、jinfo、jmap、jhat和jstack
    JVM相关工具JDK工具包jps查看Java进程jps:列出Java程序进程ID和Main函数名称jps-q:只输出进程IDjps-m:输出传递给Java进程(主函数)的参数jps-l:输出主函数的完整路径jps-v:显示传递给Java虚拟机的参数jstat查看Java程序运行时相关信息,可以查看运行时堆的相关情况jstat......
  • JVM垃圾回收机制
    JVM垃圾回收机制JVM垃圾回收机制术语回收机制:在Java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将......
  • JVM类加载机制
    JVM类加载机制类加载机制概念概念说明:1)虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型。程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载(loading)、连接(linking)、初始化(initialization)3个步骤......
  • JVM内存模型
    JVM内存模型JDK7堆内存模型内存模型说明:1)Young(新生代)Young区被划分为三部分,Eden(ˈiːdn)区和两个大小严格相同的Survivor(sərˈvaɪvər)区,其中Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在Eden区间变满的时候,GC就会将存活的对象移到空闲......
  • Spring Boot —— Caffeine(内存缓存器)
    项目中需要用一个替代concurrenthashmap能够帮忙过期或者防止一直putoom所以使用 优点内存管理优化Caffeine使用了一种基于堆外内存的存储模型,通过直接内存访问,避免了Java堆内存的垃圾回收开销。这种内存管理优化可以减少垃圾回收对应用性能的影响,提供更高的缓存读写性能......
  • 人们一般提到的安全性只涉及内存安全——但这还远远不够……而且与其他语言(包括 C++
    C++之父BjarneStroustrup:我会为全球数十亿行C++代码带来一个崭新的解决方案https://mp.weixin.qq.com/s/L8xYyR88KdHsHqyz_sQ5Sg作者|DavidCassel译者|王强策划|Tina在CppConC++会议上,这位C++的创建人明确了该编程语言中迫切需要的安全措施具体都有哪些。  ......
  • Java中内存四区
    这里简要说明这四个区域通常用于存储的变量类型:栈区(Stack):存放局部变量、方法参数、返回地址等。变量的生命周期与其所在的方法(函数)的调用周期一致。堆区(Heap):主要用于动态分配内存,存放由new关键字创建的对象和数组。变量的生命周期不受方法调用的限制,需要手动释放内......