JVM在内存中分配这些区域: 类(方法)区域,堆,堆栈,程序计数器寄存器,本机方法堆栈。
我知道堆用于存储对象,堆栈用于存储局部变量和部分结果。 根据定义, 类(方法)区域存储每类结构,例如运行时常量池,字段和方法数据,方法的代码。但我真的不明白其中的区别。
有人可以解释Class area和Heap之间的区别吗?
答案 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();
}