Java运行时栈机制


每次Java中的进程、代码或线程需要运行时,都会创建一个运行时栈来存储执行线程期间执行的操作。

运行时栈中的每个条目都称为栈帧或激活记录。一旦进程调用了某个函数,其关联的数据就会从运行时栈中删除。

一旦所有函数都被调用,运行时栈将为空。这意味着它需要从内存中移除。

此时,运行时栈被销毁,然后线程也终止。

线程的终止可以在线程完成(主动)或强制(异常终止)后发生。

运行时栈中元素销毁的顺序与运行时任务中条目创建的顺序相反。

当线程正常运行并完成执行时,会调用主函数,其条目将存储在运行时栈中。类似地,其他函数(如果有)被调用,它们的条目也被存储。当函数完成执行时,就该从运行时栈中删除条目了。最后执行的函数是第一个被删除条目的函数。

当线程异常终止时,这意味着并非所有代码行都能成功执行。这意味着由于遇到错误而引发了异常。下面是一个示例:

示例

 在线演示

public class Demo{
   public static void main(String[] args){
      test();
   }
   public static void test(){
      test_2();
      System.out.println("This is a test method.");
   }
   public static void test_2(){
      System.out.println(45/0);
      System.out.println("This is a method that divides 10 by 0.");
   }
}

输出

Exception in thread "main" java.lang.ArithmeticException: / by zero
at Demo.test_2(Demo.java:14)
at Demo.test(Demo.java:9)
at Demo.main(Demo.java:5)

名为Demo的类包含main函数,其中调用了'test'函数。定义了'test'函数,其中调用了'test_2'函数。定义了名为'test_2'的函数,其中尝试将一个数字除以0。这导致了一个异常,该异常打印在控制台上。因此,控制权不会到达'println'行以打印错误消息。

更新于:2020年7月7日

807 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告