Java中存在三种主要的内存区域:堆、栈和方法区。
堆
用来存放对象的实例和数组。
当我们创建一个对象时,JVM就会在堆内存中开辟一块用来存储该对象。
栈
如果程序执行一个方法,JVM就会在该线程的栈内存中分配一块空间。在栈中,有压栈,弹栈的名词。
当一个方法被调用时,会在栈中为该方法分配一块专门的区域。当方法执行完毕后,该方法会弹栈。
以下是在Java中定义一个方法并在调用该方法时使用栈来保存变量的示例代码。
public class Main {
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.a());
}
public int a() {
return this.b();
}
public int b() {
return 1;
}
}
在上面的代码中,首先是main方法压栈,然后是a方法压栈,再然后是b方法压栈,b执行完毕,b方法从栈里弹出了,再然后依次弹栈。
方法区
存放代码的的片段。