[디자인패턴] 1.static,heap,stack,queue 구현

silver's avatar
Nov 13, 2024
[디자인패턴] 1.static,heap,stack,queue 구현
 

1. Java 프로그램 실행 과정

 
  1. 컴파일 단계: 사람이 작성한 .java 파일을 컴파일러가 컴파일하여 .class 파일로 변환, .class 파일은 HDD에 저장되며, JVM이 이해할 수 있는 바이트코드이다.
  1. 메모리 로드: 실행하려면 메모리에 로드되어야 하므로, HDD에 저장된 .class 파일을 RAM으로 로드한다.
  1. JVM 해석 및 실행: JVM이 .class 파일을 해석(interpret)하고 실행합니다. 실행된 결과는 OS로 전달
  1. OS로 전달 및 실행: OS는 쉘(Shell)을 통해 하드웨어(HW)에서 명령을 실행하고 결과를 반환. ( os는 명령내리기 용이함.)

2. JVM 자바가상머신

JDK(Java Development Kit)설치시 JRE와 compiler가 설치

  • JRE - Java 애플리케이션이 실행될 수 있도록 라이브러리와 JVM을 포함한 실행환경을 제공.
  • JRE는 Java 프로그램 실행에 필요한 환경을 제공하여 JRE만으로도 프로그램을 실행할 수 있으므로 일반사용자는 compiler가 필요하지 않음.
 

JVM의 메모리 구조

JVM은 프로그램 실행 시 메모리를 4가지 영역으로 나누어 관리
  1. Static : 클래스와 관련된 정보와 정적(static) 변수를 저장.
  1. Heap : 새로운 키워드로 생성된 객체가 저장되는 영역으로, 프로그램이 실행되는 동안 지속.
  1. Stack : 메서드 내에서 선언된 지역 변수가 저장되는 영역으로 메서드 호출이 끝나면 메모리에서 사라짐.
  1. Queue : JVM에서 실행할 명령의 대기열로 이용.
 

3. JVM 이해코드

public class JvmTest { int num1 = 1; static int num2 = 2; void method1(int num3){ System.out.println("num3 : "+num3); int num4 = 4; System.out.println("num4 : "+num4); } public static void main(String[] args) { System.out.println("JVM Start"); System.out.println("num2 : "+JvmTest.num2); JvmTest jt = new JvmTest(); System.out.println("num1 : "+jt.num1); jt.method1(3); } }
  1. JVM이 실행되며 class를 로드한다.
  1. static를 찾아 static메모리에 할당한다. 이 때 num2,main가 static에 할당된다.
  1. main queue가 생성된다
    1. main queue가 순차적으로 진행된다.
      1. JVM Start 출력
        1. System.out.println("JVM Start");
      1. 처음에 static에 할당된 num2 출력
        1. System.out.println("num2 : "+JvmTest.num2);
      1. main의 stack에 jt의 주소가 할당, jt heap메모리에 num1,method1가 저
        1. JvmTest jt = new JvmTest();
      1. main stack에 저장된 jt의 주소를 거쳐 jt heap에 저장된 num1의 값을 불러와 출력한다.
        1. System.out.println("num1 : "+jt.num1);
      1. jt heap에 저장된 method1의 stack메모리에 지역변수인 num3와 num4가 저장되고 method1이 호출된다.
        1. jt.method1(3);
Share article

silver