변수와 메모리

public class Start2 {
    public static void main(String[] args) {
        int i;
        i = 10;
        
        double d = 20.0;
    }
}
  1. public static void main(String[] args) {
    • { 이후에 스택영역에 main 스택 프레임이 생성된다.
    • args 라는 메서드 인자가 프레임에 로드된다.
  1. int i; 의 실행
    • int i 는 4바이트 크기의 변수이다.
    • main 메서드 안에서 선언되었기에, main 스택 프레임 안에서 args 위에 i 변수가 초기화되지 않은 상태로 적재됨.
    Q. 컴파일러는 i 를 선언만하고 초기화하지 않은 상태에서 i 변수를 사용하는 코드를 만나는 경우에는 자바 컴파일러(Javac) 는

    "The local variable i may not have been initialized "경고를 토해내며 파업에 들어간다고 한다.

    어떻게 실행 전에 i 가 잘못되었다는 걸 ide 에서 인지할 수 있는지 궁금합니다. 자바는 스크립트 언어도 아니라 컴파일전까지는 실제 실행되는 바이트코드를 인지할 수 없는 상태 아닌가요?

  • i 를 10으로 초기화.
    • 변수 i 에 10이라는 값으로 초기화된다.
    • main 메서드의 프레임안에 i 스택 공간안에 10 이라는 리터럴 값이 들어가는 것이다.
  • 그렇다면 이 10 이라는 값 자체는 어디에서 오게 되는것일까?
    • 리터럴의 경우 상수 풀이라는 영역에 이미 저장된 값을 자체를 불러온다.
    • 이때, 상수풀은 Java 의 벤더사마다 버전마다 다르다고 한다
      • 힙영역 혹은 정적(클래스) 영역 이 될 수 있다.

Uploaded by N2T