日期:2014-05-20  浏览次数:20854 次

算是闲聊吧,关于java内存结构,为什么java的内存结构会大致分perm区,old区,伊甸区
perm区存放class对象,以及其他……(不知道其他是什么,被C#害的)
老生代区存放年老的对象,
新生代区又分成两部分,垃圾收集的时候从满的一边把存活的对象拷贝到空的一边……

描述可能不是很准确。

但是大家有没有想过什么要这么分呢?内存结构为什么是这样的呢???

有知道的请赐教,或者告诉我哪本书的哪部分会有涉及,我可以去看看。

------解决方案--------------------
这 会不会钻牛角尖啊,虽然佩服你的专研精神,但是一般开发人很多不清楚内存分配怎样的。
------解决方案--------------------
jvm规范并没有perm区,规范中只是说将方法信息存到方法区。
也没有规定老生代新生代,在老版本的hotspot jvm中,也确实没有这个东西,这只是使用了分代垃圾算法之后才有的东西。垃圾收集算法有很多,在实现jvm的时候想选哪个都可以。

五本书:
《Java虚拟机规范(Java SE 7)》
《深入JAVA虚拟机 第二版》
《深入理解JAVA虚拟机 JVM高级特性与最佳实践》
《IBM虚拟机J9指南.pdf》
Richard Jones&Rafael Lins著,谢之易译 的《垃圾收集》
------解决方案--------------------
感觉这个东西说不清啊。。。。。。。个人觉得PermGen区域就是放一些相对较于固定的数据,比如Class类信息之类的,至于要分代区分内存,是本着提高GC的性能设计的,老年区都是一些引用比较久的数据,GC会认为这部分数据存在的比较久,所以扫描的比较少,但是年轻代的话,都是一些快生快灭的数据,GC扫描的就多一些。
------解决方案--------------------
确实只是一种垃圾回收算法而已,一方面可以集中回收,另一方面也为了腾出连续空间吧