类区域和堆之间的区别

时间:2013-10-12 22:52:49

标签: java memory jvm

JVM在内存中分配这些区域: 类(方法)区域,堆,堆栈,程序计数器寄存器,本机方法堆栈。

我知道堆用于存储对象,堆栈用于存储局部变量和部分结果。 根据定义, 类(方法)区域存储每类结构,例如运行时常量池,字段和方法数据,方法的代码。但我真的不明白其中的区别。

有人可以解释Class area和Heap之间的区别吗?

2 个答案:

答案 0 :(得分:12)

Java 6将所有常量池和类信息存储在Perm Gen

Java 7仅将类信息存储在Perm Gen中。字符串文字池位于堆上。

Java 8没有Perm Gen.文字池和类信息都在堆上。

你已经解释了差异。类似方法的类结构存储在perm gen中。每个实例中的数据都存储在堆中。

它们是分开的,因为这些类型的数据具有非常不同的生命周期,例如对象通常是短暂的,类通常很长。

AFAIK他们正在删除它,因为太多的开发人员发现它令人困惑。

答案 1 :(得分:5)

类(方法)区域存储代码 - 这是程序的代码。堆存储对象实例。例如:

public void MakeSomeFruit(){

   Fruit myFruit=new Fruit();

}
  • MakeSomeFruit代码存储在类区域中。
  • 执行时,它创建的实际Fruit实例存储在堆中。
  • 执行时,myFruit 引用变量存储在堆栈中。这只是一个数字,它指向实例在内存中的位置 - 一个地址。