맨 처음에 JVM과 Reflection에 대해 기술면접 준비하려고 했다. 근데 나름 신중하게 변수를 지정한다고 생각하니까
개인 프로젝트를 진행하면서 변수나 클래스를 생성할 때마다 나름대로 효율적이게 생성하려고 하니까
JVM, Reflection, GC를 고려하지 않을 수 없다.
기술적인 이론을 깊게 적지 않고 나의 생각이나 얻은 정보를 얻은 것이다.
※ 나중에 보기 위한 그림

1) 객체의 생성 과정
byte코드를 통해 class Loader가 클래스와 인터페이스 클래스와 인터페이스, 메서드와 필드, Static 변수,
메서드 바이트 코드 등을 보관
의식의 흐름 1
1) Stack에서 변수를 통해서 객체에 대한 메모리를 그냥 가져오면 되지 않아?
→ Class Loader을 Method Area에 그에 대한 메타 데이터를 정보를 가져오는 것이지 실제로 Method Area
정보를 통해서 Heap에 객체를 생성하는 것이다. 그 이후 Stack에서 Heap에 대한 "객체를 참조"하는
것이다.
2) 그럼 객체를 참조하는거면 기본 변수형인 int, double, float같은 것은 null을 사용 못하겠네?
→ 실제로 기본 변수형에 null을 지정할 수 없다. 즉 null이란 없는 데이터나 빈 값이 아니라
Java에서는 "참조를 안 한다"의 뜻이 맞는 것 같다.
의식의 흐름 2
1) inner class에서 static으로 선언된 변수는 가져올 수 있겠네?
→ 실제로 inner class에서 static으로 선언하면 Method Area에 올라간다. 즉 클래스에 대한 정보가
생성되고 따로 static변수도 Method Area에 생성되는 것이다.
※ 참고로 java static final도 reflection을 이용하면 변경할 수 있다. 하지만 필자가 사용하는 java17버전은
"--illegal-access=permit" 이라는 키워드를 명시해야 한다.

'Java > 이론' 카테고리의 다른 글
[ JAVA ], [ JSP(.war) ], [ Thymeleaf(.jar) ] (0) | 2024.07.11 |
---|---|
getter(), setter() 쓰는 이유 (0) | 2024.07.06 |
Inner Class (0) | 2024.07.06 |
[ int, double, float, NULL ] (0) | 2024.07.06 |
[ static ], [ final ] (0) | 2024.07.05 |