static / heap / stack / queue

김인범's avatar
Nov 14, 2024
static / heap / stack / queue

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