Mecanismo de pila en tiempo de ejecución en Java [Use las imágenes actualizadas]

Requisito previo: Excepciones en Java

Para cada subproceso, JVM (máquina virtual Java) crea una pila en tiempo de ejecución. 

  • Todas y cada una de las llamadas realizadas en un subproceso se almacenan en la pila.
  • Cada entrada en la pila de tiempo de ejecución se conoce como registro de activación o marco de pila.
  • Después de completar cada llamada de método por parte del hilo, se elimina de la entrada correspondiente de la pila.
  • Después de completar todos los métodos, la pila estará vacía y la JVM destruirá esa pila en tiempo de ejecución antes de terminar el subproceso.

Echemos un vistazo al siguiente programa para comprender el funcionamiento de la pila en tiempo de ejecución.

Caso 1: Normalmente (terminación elegante)

Construcción de la pila en tiempo de ejecución: 

  1. En primer lugar, el hilo principal llamará al método main() y la entrada correspondiente estará en la pila.
  2. Después de que el método main() se llama el método fun(), que se almacenará en la pila.
  3. En el método fun(), se llama al método moreFun(). Por lo tanto, moreFun() se almacenará finalmente en la pila.
  4. Finalmente, moreFun() no está llamando a ningún método e imprimirá Hello Geeks!

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!");
    }
}
Producción

Hello Geeks!

Destrucción de la pila en tiempo de ejecución: después de imprimir Hello Geeks! , su entrada correspondiente se eliminará de la pila e irá al método fun() y no hay nada para ejecutar, por eso la entrada del método fun() se elimina de la pila y así sucesivamente. Cuando la pila está vacía, la JVM destruye la pila en tiempo de ejecución.

Caso 2: Anormalmente (terminación anormal)

Construcción de la pila en tiempo de ejecución: 

  1. El siguiente ejemplo tiene ArithmeticException en la ubicación del método moreFun(), la JVM verificará si hay algún código de manejo de excepciones. De lo contrario, el método moreFun() será responsable de crear objetos de excepción porque las excepciones se generan en el método moreFun() y la entrada correspondiente de la pila se eliminará y el control pasará al método fun().
  2. JVM vuelve a ir al método de la persona que llama para verificar si tiene algún código de manejo de excepciones. Si no, JVM finaliza el método de forma anormal y elimina la entrada correspondiente de la pila.
  3. El proceso anterior continúa hasta el hilo principal. Si el subproceso principal (método principal) no tiene ningún código de manejo de excepciones, la JVM también finaliza el método principal de manera anormal y el controlador de excepciones predeterminado es responsable de imprimir el mensaje de excepción en la pantalla de salida, que es parte de 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");
    }
}

Error de tiempo de ejecución: 

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)

Este artículo es una contribución de Bishal Kumar Dubey . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org . Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *