Java中的堆分配参数总结《对Java的分析总结》(二)

 

《对Java的分析总结》-Java中的堆分配参数总结 


header配制说明
-Xms:设置Java应用程序启动时的初始堆大小
-Xmx:设置Java应用程序能获得的最大堆大小
-Xss:设置线程栈的大小
-XX:MinHeapFreeRatio:设置堆空间最小空闲比例。当对空间的空闲内存小于这个数值时,JVM便会扩展堆空间
-XX:MaxHeapFreeRatio:设置堆空间的最大空闲比例。当堆空间的空闲内存大于这个数值时,便会压缩堆空间,得到一个较小的堆
-XX:NewSize:设置新生代的大小
-XX:NewRatio:设置老年代与新生代的比例,它等于老年代大小除以新生代大小
-XX:SurviorRatio:新生代中eden区与survivior区的比例
-XX:MaxPermSize:设置最大的持久区的大小
-XX:PermSize:设置永久区的初始值
-XX:TargetSurvivorRatio:设置survivior区的可使用率。当survivior区的空间使用率达到这个数值时,会将对象送入老年代

1 java 应用程序设置最大堆内存与最小堆内存 

1.1 最大堆内存 

 

java应用程序可以使用最大堆内存可以用-Xmx参数指定,最大堆内存指的是新生代和老年代的大小之和的最大值,是java应用程序的堆上限
在java程序运行时可以骑过 Runtime.getRuntime().maxMemory()取得系统的可用的最大堆内存

1.2 最小堆空间 

使用 -Xms可用于设置系统的最小堆空间,也就是jvm启动时所占据的操作系统的内存大小,java应用程序在运行时,首先会被分配-Xms指定的内存大小,并尽可能的在这个空间段内存中运行程序,当这个值无法满足应用程序时,jvm才会向操作系统中申请更多的内存,直到内存值达到-Xmx指定的大小,若超过-Xmx指定的大小时,则抛出 OutOfMemoryError异常

如果 -Xms的数值较小,那么JVM为了保证系统尽可能的在指定内存范围中运行,就会更加频繁地进行GC操作,以释放内存空间
因此 把-Xms的值设置为-Xmx时,可以在系统运行初期时减少CG的次数和耗时

2 java 应用程序设置新生代内存与持久代内存 

2.1 新生代内存

参数-Xmn用于设置新生代的大小,设置一个较大的新生代会减少老年代的大小,对系统性能以及GC有很大的影响,新生代的大小一般设置为整个堆空间的1/4到 1/3左右 

在Hot Spot虚拟机中,-XX:NewSize用于设置新生代的初始大小,-XX:MaxNewSize设置新生代的最大值,通常情况下,设置-Xmn的效果等同于设置了想用 的-XX:NewSize 和-XX:MaxNewSize,若设置不用的XX:NewSize 和-XX:MaxNewSize,可能会导致内存震荡,从而产生不必要的系统开销

2.1 持久代内存(方法区)

参数 -XX:MaxPermSize可以设置持久代的最大值,-XX:PermSize可以设置持久代的初始大小
系统所支持的最大类数量,与MaxPermSize成正比,一般设置为64M可以满足绝大部分程序的正常工作,如果不够可以设置为 128M,这是两个比较常用的永久区取值

3 java 应用程序设置线程栈内存 

参数 -Xss 参数用来设置线程栈(针对每一个线程)的大小
在线程进行局部变量分配,函数调用时,都需要在栈中开辟空间,如果栈的空间开辟太小,那么线程在运行时,就可能没有足够的空间分配局部变量或者达不到足够的函数调用深度,导致程序异常退出,如果栈的空间开辟太大,那么开设线程所需的内存成本就会上升,系统所支持的线程数就会下降

从堆内存角度来考虑,堆也是向操作系统申请内存空间的,因此堆空间过大,就会导致操作系统可用于线程栈的内存减少,从而间接减少程序所能支持的线程数量

下面是若干次测试

jvm配制-Xss1M(每个线程栈占1M)-Xss20M(每个线程栈占20M)
-Xmx100M -Xms100M176779
-Xmx300M -Xms100M156769
-Xmx500M -Xms100M146759

Java堆内存以 900M的大小递增,当栈大小为1M时,最大线程数量以200递减。
当系统的内存空间不足而无法创建新的线程时,会抛出 java.lang.OutOfMemoryError:unable to create new native thread

 

 

早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页