System.gc() 를 왜 사용하면 안될까?

명시적으로 GC를 호출하는 방법들이 2가지 있는데 아래와 같다.
1. System.gc()
2. null
 
그중 System.gc() 를 사용하면 엄청난 성능 저하를 일으킨다고 하는데 실제로 얼마나 성능이 떨어지는지 확인해 보자.
 

 
코드는 간단하다.
맨 처음 현재 시스템 시간을 출력해 준다.
ValueAdder라는 클래스를 배열로 선언해 준 뒤, 100번 반복을 하면서 a 배열 10개에 새 인스턴스를 할당해 준다.
그리고 끝나는 시스템 시간을 출력하고 끝나는 시간에서 시작 시간을 빼고 출력한다.
 
 
현재 System.gc 는 주석 처리 되어 있는 상태. 실행해 보자.

총 77ms가 걸렸다.
기존 참조값과 변경 후 참조 값은 그냥 변경되었다는 것을 눈으로 확인하기 위해 출력했다.
 
이제 System.gc() 주석을 해제하고 실행시켜 보자.

무려 8255ms.. 엄청난 속도 차이
 
게다가 현재 반복문이 (100*10) = 1,000 정도밖에 안 되는 반복인데 이렇게 시간차이가 난다는 것은 더 커지면 어마무시하게 오래 걸릴 것이라는 의미.
 
 
결론
명시적으로 호출을 원하면 null 을 표시해주자.

'Java' 카테고리의 다른 글

[Queue] add/offer 차이 && poll/remove 차이  (2) 2023.12.20