2015-02-05 33 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

在任何时候,生存空间的一个总是空的,所以它不能被视为可用。