作为一个女生,我想问下:java1.8 堆新生代内,E区竟然不是S区的8倍?

JAVA少妇 发布于 03/01 09:36
阅读 531
收藏 1

版本:

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

启动参数:

-Xms20M

-Xmx20M

默认参数:   uintx SurvivorRatio                             = 8                                   {product}

执行代码:

public static void main(String[] args) throws InterruptedException {
		while(true){
			Thread.sleep(3000);
		}
}

查看内存分布:

 

 

结果:

可以看到E区是5632,S区是512,怎么算都不是8/1

请问这是为什么呢?

加载中
0
你尽不知
你尽不知

在HotSpot中,并行系的收集器(UseParallelGC和UseParallelOldGC)默认开启了-XX:+UseAdaptiveSizePolicy自适应GC策略。在这种模式下,新生代的大小、eden和survivor的比例、晋升老年代的对象年龄等参数会被自动调节,以达到在堆大小、吞吐量和停顿时间之间的平衡点。所以自动调节后的比例是11。如果你想以自己的方式设置,我知道的有2种方式,一种是更换收集器。比如UseParNewGC。另一种是增加-Xmn参数(指定分配给新生代的大小)。

你尽不知
你尽不知
回复 @JAVA少妇 : 你是如何配置的?截个图出来
JAVA少妇
JAVA少妇
既然是:UseAdaptiveSizePolicy的自动调节起的作用,那么我将UseAdaptiveSizePolicy关了之后依然是11:1. 那么,要么是我的设置不起作用,要么是这个设置本身和比例变化没有关系. 此外,我尝试设置了新生代大小,这个比例确实变小了,只是变成了6:1
0
-乐天-
-乐天-

引用来自“你尽不知”的评论

在HotSpot中,并行系的收集器(UseParallelGC和UseParallelOldGC)默认开启了-XX:+UseAdaptiveSizePolicy自适应GC策略。在这种模式下,新生代的大小、eden和survivor的比例、晋升老年代的对象年龄等参数会被自动调节,以达到在堆大小、吞吐量和停顿时间之间的平衡点。所以自动调节后的比例是11。如果你想以自己的方式设置,我知道的有2种方式,一种是更换收集器。比如UseParNewGC。另一种是增加-Xmn参数(指定分配给新生代的大小)。

都好厉害!

0
JAVA少妇
JAVA少妇

引用来自“你尽不知”的评论

在HotSpot中,并行系的收集器(UseParallelGC和UseParallelOldGC)默认开启了-XX:+UseAdaptiveSizePolicy自适应GC策略。在这种模式下,新生代的大小、eden和survivor的比例、晋升老年代的对象年龄等参数会被自动调节,以达到在堆大小、吞吐量和停顿时间之间的平衡点。所以自动调节后的比例是11。如果你想以自己的方式设置,我知道的有2种方式,一种是更换收集器。比如UseParNewGC。另一种是增加-Xmn参数(指定分配给新生代的大小)。

这个设置最终结果还是11:1

当设置Xmn=8M时,结果时6:1

0
javaxiaoz
javaxiaoz

少妇你好,我是xiaoz

返回顶部
顶部