220504 static

메밀·2022년 10월 26일
0

※ static을 남발하면 안 되는 이유

예제 문제를 여러 방법으로 풀어보는 과정에서 객체를 만들지 않고 간단하게 진행하기 위해 static 메서드를 사용하였다. 그런데 선생님께 static 메서드는 유의하여 사용해야 한다는 피드백을 받고 다시 공부해보았다.

JVM Architecture

1) Class Loader

: JVM 내로 클래스 파일를 로드하고 링크를 통해 배치

2) Runtime Data Area

: 메모리 영역. 자바 애플리케이션을 실행할 때 사용되는 데이터를 적재

영역설명
Method Area모든 쓰레드가 공유하는 메모리 영역.
클래스, 인터페이스, 메소드, 필드, static 멤버의 바이트 코드를 보관
Heap Areanew 키워드로 생성된 객체와 배열이 생성되는 영역.
Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역
Stack Area메서드 호출 시 그 메서드만을 위한 공간.
수행이 끝나면 프레임 별로 삭제
  • PC Register, Native Method Stack: 생략

3) Execution Engine

: (클래스로더를 통해 JVM의) Runtime Data Area에 배치된 바이트 코드를 명령어 단위로 읽어서 실행.

4) Garbage Collector

: 힙 메모리 영역에 생성된 객체 중 참조되지 않은 객체를 탐색 후 제거

결론

ClassLoader는 정적 멤버를 Method Area(Static Area)에 할당하기 때문에 static 메소드는 가비지 컬렉터의 영향권 밖에 존재한다. 사용하지 않을 때도 프로그램 종료까지 메모리가 할당된 채로 존재하여 성능 저하의 원인이 된다.

0개의 댓글