본문 바로가기
C++ 200제/코딩 IT 정보

java static 변수 포함 클래스, 생성자 호출 및 메모리 할당 시점

by vicddory 2019. 5. 16.

java static 변수 포함 클래스, 생성자 호출 및 메모리 할당 시점


코딩하다 보면 java static 변수 종종 씁니다. 그럼, 자바에서는 static 변수 포함하는 클래스의 생성자 호출 시점과 메모리 할당 시점은 어떻게 될까요?


우선, 클래스 인스턴스 생성되는 시점에 static 변수도 함께 움직입니다. JVM 자체에서 클래스를 인식했다면, 이미 static 멤버들은 메모리에 올라간 상태입니다.



1
int tmp = Integer.parseInt(\"5\");
cs


▷ 위의 자바 소스 코드를 예로 들어 보겠습니다.


  • Integer.parseInt 는 멤버 함수이면서 static 함수입니다.
  • integer 는 자바 기본 클래스이므로 JVM 로딩 시 이미 로딩되었습니다.


JVM에서 클래스 로딩하는 것과 객체 Instance 화 시점에 따라 달라집니다. Integer 는 JVM 실행되며 클래스 로딩 시점에 해당 클래스의 static 멤버 변수, 함수 등을 메모리에 올립니다.


반면, 생성자는 Instance화 될 때만 호출됩니다.


static 변수, 초기화 블럭, inner class 등은 클래스가 메모리에 적재될 때 초기화됩니다. 메모리에 로딩되는 시점은 클래스 자신이 호출되는 지점이 됩니다.


생성자는 new class() 했을 때만 호출이 되는데, 만약 static 변수만 사용하게 되면(Integer.MAX_VALUE) 생성자는 호출되지 않습니다.



java static 변수 포함 클래스, 생성자 호출 및 메모리 할당 시점



▷ 결론적으로 자바 생성자 호출 시점, JVM 클래스 로딩을 별개로 생각해야 합니다. java 생성자 호출, static 변수 메모리 적재는 별개의 이야기입니다.



관련 글



ⓒ written by vicddory : 출처 뽐뿌 개발자 포럼

java static 변수 포함 클래스, 생성자 호출 및 메모리 할당 시점

댓글