이전 블로그 글에서 static Inner Class 에 관해 설명해드린 적 있습니다.
왜 Inner Class 를 사용할 때, static 을 사용해야 하는지에 관련해서 조금 더 딥하게 들어가볼 예정입니다.
그러기 위해서는 JVM 이 클래스를 로딩하는 방법 부터 알아보려고 합니다
Class Loader 란?
JAVA 는 .java 파일을 Java Compiler를 통해 .class 파일로 만들고 이 클래스 파일을 Class Loader를 통해 동적으로 읽습니다. 이러한 과정은 JVM 의 메모리 영역인 Runtime Data Area 에 배치하는 작업을 의미합니다.
클래스 로더는 다음과 같은 3 가지 단계로 클래스 파일을 읽습니다.

- Loading: .class 파일을 가져와 JVM 메모리에 불러 들입니다.(매우 짧은 시간 안에 이루어 집니다)
- Linking: 클래스 파일을 사용하기 위해 검증하는 과정입니다.
- Initialization: 클래스 파일에 존재하는 변수들을 적절한 값으롤 초기화 시켜 줍니다.
이때, 클래스를 메모리에 전부 Loading하지 않고, 애플리케이션에서 클래스를 호출할 때 동적으로 메모리에 올리는 Lazy Loading을 사용하여 조금 더 효울적으로 메모리를 관리하게 됩니다.
또한 Class Loader 내부적으로 초기화 단계에서 동기화를 해주기 때문에 멀티쓰레드 환경에서도 안전하게 사용할 수 있습니다.
reference
https://interviewnoodle.com/jvm-architecture-71fd37e7826e
https://inpa.tistory.com/entry/JAVA-☕-클래스는-언제-메모리에-로딩-초기화-되는가-❓
'Computer Science > Java' 카테고리의 다른 글
Inner Class (0) | 2024.04.28 |
---|---|
JAVA 8 vs JAVA 11 vs JAVA 17 (2) | 2024.04.21 |
JAVA record란? (1) | 2024.04.03 |