按照书上所说,当运行testAllocation()后,新生代6651KB变为148KB:
(1)是不是6M在新生代的存储中不是纯粹的?6M不是6144KB吗?为什么在新生代中时6651KB?
(2)而且此次Minor GC后,新生代从6651KB变为148KB,是指使用了“分配担保”机制将原来6M的存活对象挪到老年代了?那为什么不是全部挪走变为0KB,而是剩下148KB呢?
直接摘录书中:“此次GC结束后,4MB的allocation4对象呗顺利分配在Eden中。因此程序执行完的结果是Eden占用4MB(被allocation4占用),Survivor空闲”
但通过书中所截取的运行结果来看:
def new generation total 9216k, used 4326k
可见新生代总容量为9MB(即9216KB),但是已使用了4326KB,这里也不是纯粹的4MB(即4096KB)呀,多了一点,这就回到上面(1)提出的问题了:是不是在新生代(或者说JVM内存)中存储的对象大小都不是纯粹的,比如一个对象为4M,是不是存储在java堆中的时候就会是比4M多一点?
求指教,67页说明“对象优先在Eden分配”的疑惑
|
> 我来回应