Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

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라는 클래스에는 'test' 함수가 호출되는 주 함수가 포함되어 있습니다. 'test' 함수는 'test_2' 함수가 호출되는 곳에서 정의됩니다. 숫자를 0으로 나누려고 하는 'test_2'라는 함수가 정의되어 있습니다. 결과적으로 콘솔에 인쇄되는 예외가 발생합니다. 따라서 컨트롤은 오류 메시지를 인쇄하기 위해 'println' 줄에 도달하지 않습니다.