JVM内存配置参数

题目

对于JVM内存配置参数:

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3

,其最小内存值和Survivor区总大小分别是()

A 5120m,1024m

B 5120m,2048m

C 10240m,1024m

D 10240m,2048m

答案解析

正确答案是:D

-Xmx:最大堆大小

-Xms:初始堆大小

-Xmn: 年轻代大小

-XXSurvivorRatio=3:代表Eden:Survivor = 3

根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor;

计算Survivor大小, Eden:Survivor = 3,总大小为5120,3x+x+x=5120 x=1024(Survivor区有两个,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。

新生代大部分要回收,采用Copying算法,快!

老年代 大部分不需要回收,采用Mark-Compact算法

-Xms初始堆大小即最小内存值为10240m

所以正确答案是D 10240m,2048m

常见配置汇总

堆设置

**-Xms:**初始堆大小,表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可

**-Xmx:**最大堆大小,表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。但是开发过程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。

一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可。

-XX:NewSize=n:设置年轻代大小

-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

-XX:PermSize:设置永久区的大小

-XX:MaxPermSize=n:设置持久代大小

-XX:TargetSurvivorRatio:设置survivior 的使用率。当达到这个空间使用率时,会将对象送入老年代。

方法区参数配置
-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限

栈的容量配置
-Xss:设置线程栈的大小

本机直接内存设置

-XX:MaxDirectMemorySize :指定本机直接内存大小,如果不指定就表示和Java堆最大值(-Xmx)相同

例如:-Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

上面设置的参数就是堆初始化128M,最大堆内存是512M;方法区初始化分配内存128M,方法区最大上限是512M。

收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseParalledlOldGC:设置并行年老代收集器

-XX:+UseConcMarkSweepGC:设置并发收集器

垃圾回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

并行收集器设置

-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。

-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间

-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

并发收集器设置

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

**知识补充:**JVM内存区域总体分两类,heap区 和 非heap 区 。

heap区: Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。

非heap区: Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。

转载自:

https://mp.weixin.qq.com/s/0BfG_gVphVfdx6pBcgbgMQ,https://blog.csdn.net/weixin_40792878/article/details/82154402


版权声明:本文为m0_67392931原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。