inblog logo
|
taker
    디자인패턴

    static / heap / stack / queue

    김인범's avatar
    김인범
    Nov 14, 2024
    static / heap / stack / queue
    Contents
    1. JVM 자바가상머신정리

    1. JVM 자바가상머신

    • JVM의 동작 RAM에 JVM 사용공간 할당 사용공간은 4개로 나눠져 있다. static, heap, stack, queue
      • notion image
    • JVM 이해용 코드
    public class JvmTest { int num1 = 1; static int num2 = 2; void method1(int num3) { //method1의 stack에 매개변수 저장 System.out.println("num3 : " + num3); int num4 = 4; System.out.println("num4 :" + num4); } public static void main(String[] arg) { System.out.println("JVM START"); System.out.println("num2 : "+JvmTest.num2); //num2는 JvmTest 실행하자마자 정의되어있어서 사용가능 JvmTest jt = new JvmTest(); //heap 공간 생성 / stack 생성 // num1 = 1, method1() System.out.println("num1 : "+jt.num1); jt.method1(3); } }
    클래스가 시작 될 때 (Class 로드) num2 와 main 이 떠있는 상태다. (STATIC 찾기) main 실행 (main queue 생성) main queue에 14,15,16,17,18 들어감 14번부터 pop (queue에서 나감)
    차례대로 하다가 16번 JvmTest jt = new JvmTest(); 에서 jt의 heap 과 stack 생성 jt heap에는 num1 = 1 과 method1 이 있다. 17번 System.out.println("num1 : "+jt.num1); 에서 jt.num1 이 나오고 jt라는 참조변수를 통해 num1을 찾아서 화면에 결과를 나타낸다. 18번 jt.method1(3); 에서 jt라는 참조변수를 통해 method1을 찾아내고 메서드를 실행한다. method1 메서드가 실행될 때 (method1의 stack과 queue가 생성됨)
     
    method1 stack에 num3(매개변수)= 3 , num4 = 4 가 들어가있다. method1 queue에 7,8,9 가 순서대로 들어감 7번 pop > 8번 pop > 9번 pop 이후 메서드 기능 종료 method1의 stack 과 queue 사라짐 >> jt.method1(3) 종료
     
    main 기능 종료 > stack , queue, jt.heap, jt.stack 사라짐
     

    정리

    class가 실행 될 때 static을 찾아서 메모리에 띄워놓는다. main 메서드가 실행되면서 main stack, heap, queue가 생성된다.
     
    main queue에 main메서드 속 코드가 순서대로 들어간다.(push)
    들어간 순서대로 queue에서 배출된다. (선입선출 / pop)

    main queue 이해도 (선입선출 / push → pop)

    notion image
     

    stack 이해도 (선입후출 / push → pop)

    notion image
     
    ** queue는 선입선출 / stack은 선입후출
     
     
    heap은 클래스 참조값이 저장된다
    EX) JvmTest jt = new JvmTest();
    코드가 실행되면서 main stack 공간에 jt = *5000 이 들어가게 되고, jt heap 공간에 num1 = 1 , method1 이 들어가게 된다.
    이후
    System.out.println("num1 : "+jt.num1);
    jt.method1(3);
    두 개의 코드가 진행되면서 jt.num1 은 main stack에 있는 jt = *5000를 참조하여 jt heap 공간에 있는 num1 = 1 을 찾아서 나타낸다.
    notion image
    jt.method1(3); 는 jt = *5000를 참조하여 jt heap 공간에 있는 method1을 찾아낸다. method1 메서드가 실행되면 method1 stack 공간과 queue가 생긴다. method1 queue에 method 코드가 들어가고 진행된다. 전부 실행되고 나면 jt heap 과 stack 공간은 사라진다. main의 코드진행이 끝났으니 main의 저장공간 또한 사라지고 클래스의 작업 또한 끝났으니 static 저장공간의 정보들도 사라진다.
     
     
     
    Share article

    taker

    RSS·Powered by Inblog