我了解方法的变量会被存储在堆栈中,而类变量则会被存储在堆中。那么我们创建的类和对象存储在Java中的哪里?
我了解方法的变量会被存储在堆栈中,而类变量则会被存储在堆中。那么我们创建的类和对象存储在Java中的哪里?
JVM中的运行时数据区可以分为以下几个部分:
方法区:用于存储已编译类文件的存储区域。(每个JVM实例一个)
堆:用于存储对象的存储区域。(每个JVM实例一个)
Java栈:用于存储本地变量、中间操作结果的存储区域。(每个线程一个)
PC寄存器:用于存储下一条要执行的指令地址,如果下一条指令是本机方法,则PC寄存器中的值将未定义。(每个线程一个)
本机方法栈:用于执行本机方法(使用Java以外的语言编写的方法)的帮助栈。(每个线程一个)
内存的Stack部分包含方法、局部变量和引用变量。
Heap部分包含对象(也可能包含引用变量)。
通过简短的谷歌搜索,我找到了一个描述它的链接,是一个YouTube视频链接。 ^_^
public class Sample{
int field;
static int constant;
public void test(){
int localVariable=10;
Sample samp=new Sample();
}
}
局部变量(方法变量)和方法存在于栈上,而对象及其实例变量则存在于堆上。
现在,引用变量可以是局部变量(如果在方法内创建),也可以是实例变量(如果在类内但在方法外创建)。因此,引用变量可以存在于任何地方,无论是栈还是堆。
String s="OOO"
中,s
保存对对象"OOO"
的引用)或者基本值(例如在int i=10
中,i
保存10
)。这些变量可以在堆上或栈上,取决于它们是否为局部变量以及使用的JVM版本。希望这能澄清事情。