2015-02-05 38 views
0

Java堆上,我預期年輕一代的大小將是伊甸園空間兩者的大小之和在生存空間從空間空間):缺少內存:年輕一代的尺寸只包括一個生存空間

[young gen size] = [eden space size] + [from space size] + [to space size] 

然而,GC日誌(使用XX:+PrintHeapAtGC)狀態,該年輕一代的大小是伊甸園空間的大小之和只有生存空間之一:

[young gen size] = [eden space size] + [from space size] 

爲什麼的大小年輕一代只包括一個倖存者空間的大小?

也許是因爲只有生存空間之一可用在任何時候?但倖存者空間存在所以這兩個倖存者空間應該貢獻的大小新一代

GC日誌:

{Heap before GC invocations=48 (full 17): 
par new generation total 943744K, used 891496K [0x000000073ae00000, 0x000000077ae00000, 0x000000077ae00000) 
    eden space 838912K, 100% used [0x000000073ae00000, 0x000000076e140000, 0x000000076e140000) 
    from space 104832K, 50% used [0x000000076e140000, 0x000000077149a040, 0x00000007747a0000) 
    to space 104832K, 0% used [0x00000007747a0000, 0x00000007747a0000, 0x000000077ae00000) 

從中:

[young gen size] = [eden space size] + [from space size] 
    943744K  =  838912K  +  104832K 

回答

2

在任何時候,生存空間的一個總是空的,所以它不能被視爲可用。