JVM在内存中分配这些区域:Class(Method) Area、Heap、Stack、Program counter Register、Native method stack。
我知道堆用于存储对象,堆栈用于存储局部变量和部分结果。根据定义,Class(Method) Area 存储每个类的结构,例如运行时常量池、字段和方法数据、方法的代码。但我真的不明白其中的区别。
谁能解释一下类区和堆之间的区别?
Java 6 将所有常量池和类信息存储在 Perm Gen 中
Java 7 仅将类信息存储在 Perm Gen 中。字符串字面量池位于堆上。
Java 8 没有 Perm Gen。文字池和类信息在堆上。
您已经解释了差异。类结构(如方法)存储在 perm gen 中。每个实例中的数据都存储在堆中。
它们是分开的,因为这些类型的数据具有非常不同的生命周期,例如对象通常寿命很短,而类通常寿命很长。
AFAIK 他们正在删除它,因为太多的开发人员发现它令人困惑。
类(方法)区域存储代码——这是你的程序的代码。堆存储对象实例。例如:
public void MakeSomeFruit(){
Fruit myFruit=new Fruit();
}