변수와, 메서드, 내부 클래스의 시그니처에 포함 할 수 있다.
static
키워드를 통해 생성된 정적 멤버는 Heap
영역이 아닌, Method
영역에 할당되며, 어디서든 참조가 가능하다.
기본적으로는 GC (Garbage Collector)
관리 영역이 아니다. (Java8부터는 GC 관리 영역이다)
OpenJDK8 reference 에서는 다음과 같은 내용이 있다.
JVM 에서 permanent
영역은 제거되고, 관리되던 intern()
된 String
, class static variable
은 java heap 영역으로 옮겨졌고, class metadata
는 native memory 로 옮겨졌다.
class statics
, static variables
는 static object 를 의미한다.
Java7 까지는 static object 를 permanent 영역에서 관리했으나, Java8 버전부터는 heap 영역에서 관리하게 변경되었다.
java application 실행시, ClassLoader
의 load
가 완료되면 메모리에 할당되어 사용이 가능함
public static void main(String[] args) {}
static
변수에 접근 가능객체 참조를 사용하여, 직접 액세스 할 수 있지만, 인스턴수 변수인지, 클래스 변수인지 파악하기 어려우므로 클래스이름.변수 형태로 접근해야 한다. ex ) Cat.NumberOfTail
String.valueOf(int value)