자바의 Static

개발세발·2024년 1월 1일
0

메인 클래스가 동작되는 방식

  1. JVM이 실행할 클래스를 찾는다.
  2. 찾아서 static 키워드가 붙어있는 멤버들을 정해진 메모리 위치에 한 번 자동으로 로딩한다.
    -> main()메서드가 static이기 때문에 메모리에 자동으로 로딩한다.
  3. JVM이 static-zone에서 main()메서드를 호출한다.
  4. 호출된 메서드를 Call Stack Frame Area(Stack Area)에 Push(기계어 코드를 넣고) 한 뒤 동작을 시작한다.
  • Call Stack Frame Area: 메서드가 호출되면 호출된 기계어 코드가 push되고 실행되는 메모리 공간.
    현재 프로그램이 실행되고 있는 상태를 파악할 수 있다.
    Last-In-First-Out(LIFO)구조이다.
  • static은 static메서드만 호출할 수 있다. static 멤버는 객체를 생성할 필요가 없다.
    static 멤버의 접근 방법: 클래스이름.호출메서드
  • none-static의 경우는 객체를 생성해서 메모리에 로딩을 시켜주어야 한다.

JVM의 메모리 모델

  • Method Area: 메서드의 바이트코드(기계어 코드)가 할당되는 공간
    static-zone과 none-static-zone으로 나누어진다.
    static 멤버들은 static-zone에 해당한다.

  • Heap Area Generation: 객체가 생성되는 메모리 공간(new 연산자)
    Garbage Collection에 의해서 메모리가 수집된다. - 사용하지 않는 객체들을 메모리 공간에서 삭제하여 메모리 효율성을 확보한다.

  • Stack Area, PC register, Native Method Area: 메서드가 호출되면 메서드의 기계어코드를 할당 받고(Native Method Area) 메서드가 실행되는 메모리 공간(Stack Area-지역변수, 매개변수들이 만들어지는 공간)
    PC에 의해서 현재 실행 중인 프로그램의 위치가 관리된다.
    LIFO구조로 운영이 되는 메모리 공간(메서드의 호출 순서를 할 수 있다.)

  • Runtime Constant Pool(Literal Pool): 상수 값이 할당이 되는 메모리 공간, 문자열 중 문자열 상수(리터럴)가 할당되는 메모리 공간

0개의 댓글