我最近在java中已经阅读了很多关于内存分配方案的内容,并且由于我从各种来源阅读,因此有很多疑问。我已经收集了我的概念,并且我会要求完成所有要点并对它们进行评论。我开始知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特定的。
- 类(由类加载器加载)进入堆上的特殊区域:永久生成
- 与类名称,与类关联的对象数组,JVM使用的内部对象(如java / lang / Object)和优化信息等类相关的所有信息都会进入永久生成区域。
- 所有静态成员变量再次保留在Permanent Generation区域。
- 对象进入不同的堆:年轻一代
- 每个类只有一个方法的副本,无论是静态还是非静态方法。该副本放在永久生成区域。
对于非静态方法,所有参数和局部变量都进入堆栈 - 只要对该方法进行具体调用,我们就会得到一个与之关联的新堆栈帧。
我不确定静态方法的局部变量存储在哪里。他们是永久世代的堆吗?或者只是他们的引用存储在Permanent Generation区域中,而实际的副本是在其他地方(Where?)
- 我也不确定方法的返回类型存储在哪里。
- 如果对象(在年轻一代中)需要使用静态成员(在永久代中),则会给出对静态成员&&的引用。它们有足够的内存空间来存储方法的返回类型等。
醇>
感谢您完成此操作!