학습(구)/Java(구)

자바 성능 튜닝 - reflection

잉아당 2021. 6. 5. 13:58
728x90

자바에는 reflection 패키지를 이용해 JVM에 로딩되어져 있는 클래스와 메서드의 정보를 알 수 있습니다.

 

Class 클래스

- 클래스에 대한 정보를 얻을 때 사용하기 좋고 생성자는 따로 존재하지 않습니다.

- 주로 Object클래스의 getClass()를 사용해 가져옵니다.

- 각 메서드를 통해 클래스, 필드, 메서드, 생성자 와 같은 정보를 가져올 수 있습니다.

 

Method 클래스

- 메서드에 대한 정보를 얻을 수 있고 생성자가 따로 없어 Method클래스의 정보를 얻기 위해서 Class클래스의 메서드를 사용해야합니다.

- Method클래스의 각 메서드를 통해 메서드의 이름, 매개변수, 리턴 타입 등에 대한 정보를 가져올 수 있습니다.

 

Field 클래스

 - 클래스에 있는 변수들의 정보를 제공하기 위해 사용됩니다.

- 생성자가 존재 하지 않으므로 Class클래스의 메서드를 사용해야합니다.

- 각 메서드를 통해 변수에 대한 정보를 가져올 수 있습니다.

 

getCalss()의 경우 Class 객체를 만들고 해당 객체의 이름을 가져옵니다.

단순히 클래스를 비교할 때는 getClass()를 호출하여 비교하는 것 보다 instanceof를 사용하는 것이 성능면에서 더 좋습니다.

또한 클래스의 메타 데이터 정보는 JVM의 Perm 영역에 저장됩니다. 많은 클래스를 Class 클래스를 이용해 동적 생성할 경우 Perm영역이 더이상 사용하지 못하게 되어 OutOfMemoryError가 발생할 수도 있습니다.