登录/注册
下载豆瓣客户端
豆瓣 6.0 全新发布 ×

豆瓣

扫码直接下载

iPhone · Android
  • 豆瓣
  • 读书
  • 电影
  • 音乐
  • 同城
  • 小组
  • 阅读
  • FM
  • 时间
  • 豆品
豆瓣读书
搜索:
  • 购书单
  • 电子图书
  • 2024年度榜单
  • 2024年度报告

求指教,67页说明“对象优先在Eden分配”的疑惑

whg 2012-08-11 23:16:48

按照书上所说,当运行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多一点?


赞
转发
回应 只看楼主

> 我来回应

> 去深入理解Java虚拟机的论坛

最新讨论 · · · · · · (全部)

长期招聘JVM大牛(飞逝的梦想)

代码清单2-5 借助CGLib使得方法区出现内存溢出异常...(千里驴)

不错(jackQ)

© 2005-2025 douban.com, all rights reserved 北京豆网科技有限公司 关于豆瓣 · 在豆瓣工作 · 联系我们 · 法律声明 · 帮助中心 · 图书馆合作 · 移动应用