栈空间内存、堆空间内存和方法区内存
在学习Java的过程中,我们知道,我们编译出的class文件,需要加载到内存中才可以运行。在Java中,有三个很重要的内存空间:栈内存空间、堆内存空间以及方法区内存空间。今天,我就来谈一下我对于这三个内存空间的一些理解吧。
首先,我们先来讲一下,什么是栈内存空间、堆内存空间、方法区内存空间。
栈是一种数据结构,特点是后进先出,意思是最后进入的数据会最先被读取。在栈内存空间中,存储的是方法以及局部变量。当方法被执行时,栈内存空间中就会为其分配内存,此时方法就会进入栈空间执行,称为压栈。当方法执行结束后,就会释放空间,称为弹栈,此时方法就会退出栈内存空间。方法一定是压栈和弹栈!
堆内存空间是一块比栈内存空间大得多的空间,主要用于储存java程序中产生的对象。比如在程序中遇到new关键字,就会产生一个对象实例,这个对象实例会被存储在堆内存空间中。
方法区内存空间中保存的是代码片段、常量以及static修饰的变量。在jdk1.7以前,方法区内存空间中还存在一个常量池来储存常量(其中包含了String),在jdk1.8以后,常量池从方法区中移除,在堆区增加了元数据空间。
实例
public class Test
{
public static void main(String[] args)
{
Test res = new Test();
res.test();
}
public void test()
{
int a = 10;
System.out.println(a);
}
}
栈内存空间中所有方法执行结束后,都会弹栈,释放内存。