자바 성능 튜닝 - static
웹 리턴 코드
200 : 정상 적인 경우
300 : 리다이렉션이 필요한 코드
400 : 클라이언트 오류
500 : 서버 오류
자바에서 static으로 변수를 생성할 경우 객체의 변수가 아닌 클래스의 변수가 됩니다. 클래스의 인스턴스를 생성하더라도 모든 객체가 static 변수에 대해서 동일한 주소의 값을 리턴하게 됩니다. 따라서 객체를 생성하지 않고 클래스를 통해서도 접근할 수 있으며 인스턴스와 클래스 모두 동일한 주소를 가리키게 됩니다.
static 블록의 경우 인스턴스 생성과 별개로 클래스가 로딩될때 수행되고 위치도 상관이 없습니다. 또한 여러번 사용할 수 있고 GC 대상에 포함되지 않고 순차적으로 실행이 됩니다. 하나의 JVM이나 WAS에서는 하나의 주소만 가르키고 있기 때문에 조심해서 사용해야 합니다.
static 활용법
1. 자주 사용하고 절대 변하지 않는 변수는 final static으로 선언
ex) 로그인 관련 쿼리, 간단한 목록 조회 쿼리 등
velocity : 템플릿을 정해 놓고 실행시 원하는 매개변수 값을 던져 원하는 화면을 동적으로 구성할 수 있게 해주는 컴포넌트
velocity의 경우 템플릿을 읽어 파싱하므로 서버의 cpu에 많은 부하가 생깁니다. 해당 부분을 static 블록에 작성하면 화면 요청 때마다 템플릿 객체를 파싱하지 않아도 되므로 성능이 향상되게 됩니다. 그러나 템플릿이 자주 변경되는 경우도 있므로 상황에 맞춰 사용해야 합니다.
2. 설정 파일 정보도 static으로 관리
설정 객체등을 생성할 때 마다 설정파일을 로딩하면 많은 성능저하가 발생하므로 static으로 미리 읽어서 관리하는 것이 좋습니다.
3. 코드성 데이터는 DB에서 한번만 읽기
데이터 양이 작고 변화가 적으며 조회 빈도가 높은 코드성 데이터는 DB에서 한번만 읽어 관리하는것이 좋습니다.
static 잘못 사용한 예
static으로 공용으로 사용되며 자주 변경되는 부분을 지정하게 되면 여러 곳에서 호출할 경우 변경되는 부분을 사용하는 곳 모두가 변경 되어지기 때문에 문제가 발생하게 됩니다. => 클래스 변수 이기 때문에 주소를 한곳만 사용하기 때문
컬렉션을 static으로 지정하여 사용하게 되면 GC가 되어지지 않기 때문에 데이터가 계속 쌓여 OUtOfMemoryError를 발생하게 됩니다.
메모리 릭 : 가용 메모리가 없어지는 현상
=> 해결하기 위해서는 시스템을 재가동 해야합니다.
==> static은 반드시 메모리에 올라가게 되며 GC의 대상이 되지 않습니다. 객체를 생성하더라도 초기화 되지 않고 해당 클래스를 사용하는 모든 곳에서 공유하므로 주의해서 사용해야 합니다.