Computer Science/Java

Class Loading

효순도순 2024. 5. 5. 20:50

이전 블로그 글에서 static Inner Class 에 관해 설명해드린 적 있습니다.

왜 Inner Class 를 사용할 때, static 을 사용해야 하는지에 관련해서 조금 더 딥하게 들어가볼 예정입니다.

그러기 위해서는 JVM 이 클래스를 로딩하는 방법 부터 알아보려고 합니다

Class Loader 란?

JAVA 는 .java 파일을 Java Compiler를 통해 .class 파일로 만들고 이 클래스 파일을 Class Loader를 통해 동적으로 읽습니다. 이러한 과정은 JVM 의 메모리 영역인 Runtime Data Area 에 배치하는 작업을 의미합니다.

클래스 로더는 다음과 같은 3 가지 단계로 클래스 파일을 읽습니다.

  1. Loading: .class 파일을 가져와 JVM 메모리에 불러 들입니다.(매우 짧은 시간 안에 이루어 집니다)
  2. Linking: 클래스 파일을 사용하기 위해 검증하는 과정입니다.
  3. Initialization: 클래스 파일에 존재하는 변수들을 적절한 값으롤 초기화 시켜 줍니다.

이때, 클래스를 메모리에 전부 Loading하지 않고, 애플리케이션에서 클래스를 호출할 때 동적으로 메모리에 올리는 Lazy Loading을 사용하여 조금 더 효울적으로 메모리를 관리하게 됩니다.

또한 Class Loader 내부적으로 초기화 단계에서 동기화를 해주기 때문에 멀티쓰레드 환경에서도 안전하게 사용할 수 있습니다.

 


reference

https://interviewnoodle.com/jvm-architecture-71fd37e7826e

https://inpa.tistory.com/entry/JAVA-☕-클래스는-언제-메모리에-로딩-초기화-되는가-❓