Java中的运行时堆栈机制[使用更新的图像]

先决条件: Java中的异常

null

对于每个线程,JVM(Java虚拟机)都会创建一个运行时堆栈。

  • 线程中执行的每个调用都存储在堆栈中。
  • 运行时堆栈中的每个条目称为激活记录或堆栈帧。
  • 完成线程的每个方法调用后,都会从堆栈的相应条目中删除。
  • 完成所有方法后,堆栈将为空,JVM将在终止线程之前销毁该运行时堆栈。

让我们看看下面的程序,以了解运行时堆栈的工作原理。

案例1:正常(优雅终止)

运行时堆栈的构造:

  1. 首先,主线程将调用main()方法,相应的条目将出现在堆栈中。
  2. 之后,main()方法被称为fun()方法,它将存储在堆栈中。
  3. 在fun()方法中,调用moreFun()方法。因此,moreFun()最终将存储在堆栈中。
  4. 最后,moreFun()没有调用任何方法,它会打印出来 你好,极客们!

JAVA

// Java program to illustrate run time
// Run-time stack mechanism in
// normal flow of Exception handling
class Geeks {
public static void main(String[] args)
{
fun();
}
public static void fun()
{
moreFun();
}
public static void moreFun()
{
System.out.println( "Hello Geeks!" );
}
}


输出

Hello Geeks!

销毁运行时堆栈: 印后 你好,极客们! ,它相应的条目将从堆栈中删除,然后它将转到fun()方法,并且没有任何可执行的内容,这就是为什么fun()方法的条目将从堆栈中删除,以此类推。当堆栈为空时,JVM会销毁运行时堆栈。

图片[1]-Java中的运行时堆栈机制[使用更新的图像]-yiteyi-C++库

案例2:异常(异常终止)

运行时堆栈的构造:

  1. 下面的示例在方法moreFun()位置有算术异常,JVM将检查是否存在任何异常处理代码。如果没有,那么方法moreFun()将负责创建异常对象,因为异常是在方法moreFun()上引发的,堆栈中的相应条目将被删除,控件将转到方法fun()。
  2. JVM再次转到调用者方法,检查它是否有任何异常处理代码。如果没有,JVM会异常终止该方法,并从堆栈中删除相应的条目。
  3. 上述过程一直持续到主线程。如果主线程(main方法)没有任何异常处理代码,JVM也会异常终止main方法,默认的异常处理程序负责将异常消息打印到作为JVM一部分的输出屏幕。

JAVA

// Java program to illustrate run time
// Run-time stack mechanism in
// normal flow of Exception handling
public class ExceptionHandling {
public static void main(String[] args)
{
fun();
}
public static void fun()
{
moreFun();
System.out.println( "Method fun" );
}
public static void moreFun()
{
System.out.println( 10 / 0 );
System.out.println( "Method moreFun" );
}
}


运行时错误:

Exception in thread "main" java.lang.ArithmeticException: / by zero    at ExceptionHandling.moreFun(ExceptionHandling.java:16)    at ExceptionHandling.fun(ExceptionHandling.java:11)    at ExceptionHandling.main(ExceptionHandling.java:7)

图片[2]-Java中的运行时堆栈机制[使用更新的图像]-yiteyi-C++库

本文由 比沙尔·库马尔·杜比 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 .查看你在GeekSforgeks主页上的文章,并帮助其他极客。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享