예제 문제를 여러 방법으로 풀어보는 과정에서 객체를 만들지 않고 간단하게 진행하기 위해 static 메서드를 사용하였다. 그런데 선생님께 static 메서드는 유의하여 사용해야 한다는 피드백을 받고 다시 공부해보았다.
: JVM 내로 클래스 파일를 로드하고 링크를 통해 배치
: 메모리 영역. 자바 애플리케이션을 실행할 때 사용되는 데이터를 적재
영역 | 설명 |
---|---|
Method Area | 모든 쓰레드가 공유하는 메모리 영역. 클래스, 인터페이스, 메소드, 필드, static 멤버의 바이트 코드를 보관 |
Heap Area | new 키워드로 생성된 객체와 배열이 생성되는 영역. Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역 |
Stack Area | 메서드 호출 시 그 메서드만을 위한 공간. 수행이 끝나면 프레임 별로 삭제 |
: (클래스로더를 통해 JVM의) Runtime Data Area에 배치된 바이트 코드를 명령어 단위로 읽어서 실행.
: 힙 메모리 영역에 생성된 객체 중 참조되지 않은 객체를 탐색 후 제거
ClassLoader는 정적 멤버를 Method Area(Static Area)에 할당하기 때문에 static 메소드는 가비지 컬렉터의 영향권 밖에 존재한다. 사용하지 않을 때도 프로그램 종료까지 메모리가 할당된 채로 존재하여 성능 저하의 원인이 된다.