티스토리 뷰
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 )되기만 하면
메모리가 정리기 되지 않아 메모리 릭으로 이어져 시스템 자체가 돌아갈 수 없는 상태에 이를 수 있습니다.
'Java' 카테고리의 다른 글
[ Java ] jps 동작 안하는 문제 (0) | 2020.11.12 |
---|---|
[ Java ] 자바 컴파일에 대한 이해 (0) | 2020.11.06 |
[ Java ] ArrayList, Vector, LinkedList (0) | 2020.09.22 |
[ Java ] - String, StringBuffer, StringBuilder 비교 (0) | 2020.09.21 |
클래스패스 Class path 란? (0) | 2020.08.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Postman
- gradle
- scala
- error
- Size
- Spark
- Index
- Kibana
- plugin
- maven
- Git
- JSON
- Log
- tomcat
- JPA
- spring
- AWS
- spring boot
- elasticsearch
- logstash
- install
- mac
- docker
- Container
- SpringBoot
- Java
- apm
- Filter
- Linux
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함