类区域和堆之间的区别

tra*_*zer 5 java memory jvm

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

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

谁能解释一下Class area和Heap之间的区别?

Pet*_*rey 14

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

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

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

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

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

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


Luk*_*ggs 5

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

public void MakeSomeFruit(){

   Fruit myFruit=new Fruit();

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