java中的静态分配 - 堆,堆栈和永久生成

时间:2010-10-03 12:00:36

标签: java static memory-management permanent-generation

我最近在java中已经阅读了很多关于内存分配方案的内容,并且由于我从各种来源阅读,因此有很多疑问。我已经收集了我的概念,并且我会要求完成所有要点并对它们进行评论。我开始知道内存分配是特定于JVM的,所以我必须事先说,我的问题是Sun特定的。

  1. 类(由类加载器加载)进入堆上的特殊区域:永久生成
  2. 与类名称,与类关联的对象数组,JVM使用的内部对象(如java / lang / Object)和优化信息等类相关的所有信息都会进入永久生成区域。
  3. 所有静态成员变量再次保留在Permanent Generation区域。
  4. 对象进入不同的堆:年轻一代
  5. 每个类只有一个方法的副本,无论是静态还是非静态方法。该副本放在永久生成区域。 对于非静态方法,所有参数和局部变量都进入堆栈 - 只要对该方法进行具体调用,我们就会得到一个与之关联的新堆栈帧。 我不确定静态方法的局部变量存储在哪里。他们是永久世代的堆吗?或者只是他们的引用存储在Permanent Generation区域中,而实际的副本是在其他地方(Where?)
  6. 我也不确定方法的返回类型存储在哪里。
  7. 如果对象(在年轻一代中)需要使用静态成员(在永久代中),则会给出对静态成员&&的引用。它们有足够的内存空间来存储方法的返回类型等。
  8. 感谢您完成此操作!

1 个答案:

答案 0 :(得分:140)

相关问题