static 변수 및 메소드는 언제 메모리에 할당되고 해제될까?
본 궁금증을 해결하기 위해 static 메모리 영역에 좀 더 관심을 갖고 공부해보자!
메모리 영역 살펴보기

Static 메모리에는 클래스, static 변수 및 메소드가 존재한다. Static 변수 및 메소드는 객체(인스턴스)를 생성하지 않고도 접근이 가능하며, 여러 객체(인스턴스)들이 공유한다. JVM이 프로그램을 시작할 때 할당되고, 프로그램을 종료할 때 할당 해제된다. GC에 의해 관리되지 않으며 생명주기가 프로그램의 시작부터 종료까지이므로 프로그램 실행 내내 메모리에 할당된 채 존재한다. 따라서 과용하게 되면 시스템의 성능에 악영향을 미칠 수 있다는 점을 생각해야 한다.
Heap 메모리에는 new 연산자에 의해서 생성된 객체(인스턴스)들이 존재하는 영역이다. GC에 의해 관리된다.
Static 변수 및 메소드의 특별함
일반적인(non-static) 클래스의 변수 및 메소드는 해당 클래스가 인스턴스화(new 연산자를 통한 생성)되기 전까지는 사용할 수 없다. 하지만 static 변수나 메소드는 인스턴스의 생성과 상관없이(즉, 객체를 생성하지 않고도) 접근하여 사용할 수 있다. 즉, 프로그램 시작 시 메모리에 고정적으로 할당되며 프로그램이 종료될 때 해제된다.
그래서, Static 변수와 메소드는
JVM의 실행과정에서 필요한 클래스의 정보를 메모리에 로딩한다. 이 로딩 시점에서 static 변수가 초기화된다.
따라서, 프로그램 시작 시 static 메모리에 할당되며 프로그램이 종료될 때 해제된다.
[출처]
kim-daeyong.github.io/2019-07-09-static/
static에 대해
오늘 면접에서 static의 생명주기에 대한 질문을 들었다. static의 용도나 메모리에 한번 올라가고~ 이런건 알았는데 static이 언제 생성되고 언제 소멸하는지는 대충은 생각하고 있었지만 정확한 때
kim-daeyong.github.io
[Java] static변수와 static 메소드
1. Static 정리 Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필
mangkyu.tistory.com
'Java' 카테고리의 다른 글
[Effective Java] 이펙티브 자바 2장 - 객체 생성과 파괴 (0) | 2021.04.04 |
---|---|
[Java] 정적 변수와 정적 메소드 (static) (0) | 2021.03.30 |