Java
[ Java ] static 에 관하여
구티맨
2020. 9. 28. 10:40
static 은 객체가 아닌 클래스에 할당이 됩니다.
그래서 A 클래스에 여러 객체가 생성되어도 static 은 같은 메모리를 참조하고 있습니다.
static 은 클래스가 최초 로딩될 때 수행 되며, static 초기화 블록은 순차적으로 읽혀집니다.
이를 바탕으로 아래 예제를 살펴봅시다.
public class Main {
static private String val = "Hello";
static {
val = "static block";
}
public static void main(String[] args) {
System.out.println(val);
}
static {
val = "static block2";
}
}
결과
static block2
Static 사용
static 을 어떻게 잘.. 쓰면 좋을까요?
static은 GC의 대상이 되지 않는 다는 점이 중요한데, 이를 잘 활용하면 성능을 향상시킬 수 있지만
그렇지 않으면 성능에 오히려 악영향을 끼칠 수 있습니다.
설정 파일 읽기
객체 마다 변하지 않는 설정 파일 내용이나 특정 템플릿 내용을 읽을 때 static으로 데이터를 읽으면
객체 생성시 마다 파일에 엑세스를 하지 않아도 되어 부하를 줄일 수 있습니다.
메모리 릭
위에 언급 했듯이, GC 의 대상이 되지 않기 때문에 static 변수에 메모리가 계속 할당( new )되기만 하면
메모리가 정리기 되지 않아 메모리 릭으로 이어져 시스템 자체가 돌아갈 수 없는 상태에 이를 수 있습니다.