• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

ClassLoader에서 초기화 하는 과정에서 궁금한 점이 있습니다.

19.09.09 16:41 작성 조회수 369

0

강의를 통해 클래스의 static 변수등을 메소드 영역에 저장하는 순간이 '초기화' 과정에서 이뤄진다는 점을 알게 되었습니다. 그리고 관련해서 제가 예전에 공부했던 내용중에 궁금했던 점이 있어 질문 드리고 싶습니다!

예전에 Singleton객체에서 LazyHolder를 통한 방식을 공부하다가. ClassLoader이 지연타임로딩을 통해 클래스를 필요한 순간에만 로딩한다는 사실을 배웠었습니다.

public Class ExampleSingleton{

    private ExampleSingleton(){}

    public static ExampleSingleton get(){
       return LazyHolder.INSTANCE;

    }
   

    private static class LazyHolder{

        private static final INSTANCE = new ExampleSingleton();    

    }
}

위와같은 코드가 있을때 static으로 선언된 클래스는 ExampleSingleton클래스가 로드될때 같이 로딩되지 않고, 실제 LazyHolder클래스를 사용할때 로딩된다는 내용이었습니다.
하지만 static 변수는 ExampleSingleton클래스가 로드될때 메모리에 생성 하고, 왜 똑같이 내부에 static으로 선언된 LazyHolder클래스는 메모리에 올라가지 않는지 궁금합니다..! 

답변 1

답변을 작성해보세요.

0

말씀하신 "ClassLoader이 지연타임로딩을 통해 클래스를 필요한 순간에만 로딩한다는 사실"에 입각하면 LazyHolder 클래스가 사용될 시점에 로딩 되는것이 무엇이 이상한걸까요?