본문 바로가기

Java/이론

[ JVM ] , [ Reflection ] - 나의 생각, 기술적 이론 X

맨 처음에 JVM과 Reflection에 대해 기술면접 준비하려고 했다. 근데 나름 신중하게 변수를 지정한다고 생각하니까

개인 프로젝트를 진행하면서 변수나 클래스를 생성할 때마다 나름대로 효율적이게 생성하려고 하니까

JVM, Reflection, GC를 고려하지 않을 수 없다.

 

기술적인 이론을 깊게 적지 않고 나의 생각이나 얻은 정보를 얻은 것이다.

 

※ 나중에 보기 위한 그림

JVM 과정

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