Java Virtual Machine Stacks (Java 虚拟机栈)
    我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟
    机就会为其分配一块栈内存。

    • 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
    • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法

      1. public class TestFrames {
      2. public static void main(String[] args) {
      3. Thread t1 = new Thread(){
      4. @Override
      5. public void run() {
      6. method1(20);
      7. }
      8. };
      9. t1.setName("t1");
      10. t1.start();
      11. method1(10);
      12. }
      13. private static void method1(int x) {
      14. int y = x + 1;
      15. Object m = method2();
      16. System.out.println(m);
      17. }
      18. private static Object method2() {
      19. Object n = new Object();
      20. return n;
      21. }
      22. }

      以debug方式运行:
      image.png
      虚拟机栈就是先进后出,下图的线程就是代表一个栈,当我们运行完一个线程,线程就会被垃圾回收器回收。
      image.png

    每个线程里有不同的栈帧,也就是每个栈都有不同的栈帧。