2024-05-16 오늘의 TIL

이재성·2024년 5월 17일
post-thumbnail

자바의 main은 생성없이 실행될까

public class StaticMain{
	public static void main(string[] args){
    	System.out.print("hi");
    }
}

생성자가 없이 실행되는 이유는 JVM에 있다.

JVM의 Modle

  • Method Area

메서드의 바이트코드가 할당되는 공간
static-zone none-static-zone 으로 나누어짐
static맴버들은 static zone에 할당

  • Heap Area

객체가 생성되는 공간(new)
GC(garbage collector)에 의해 메모리가 수집됨

  • Stack Area - PC register Native Method Area

메서드가 호출되면 메서드의 기계어코드를 할당받고 메서드가 실행되는 메모리 공간
(지역변수, 매개변수들이 만들어지는 공간)
PC(program counter)에 의해 현재 실행중인 프로그램의 위치가 관리한다
LIFO(last-in-first-out)구조로 운영되는 메모리 공간(메서드의 호출 순서를 알수 있음)

  • Runtime Constant Pool

상수 값 할당이 되는 메모리 공간(literal pool)

main 클래스가 실행되는 방식

  1. JVM이 실행할 클래스를 찾음
  2. static 키워드가 붙어있는 멤버들을 정해진 메모리(static-zone) 위치에 한번 자동으로 로딩
    (static 맴버들은 클래스를 사용하는 시점에서 딱한번 메모리에 로딩)
    -> 메인 메서드가 static 이기 때문에 메모리에 자동으로 로딩
  3. JVM이 static-zone에서 main 메서드를 호출
  4. 호출된 메서드를 Stack Area에 push 하고 동작함

profile
하이요

0개의 댓글