자바코드 는 JVM에 의해서 3가지 메모리 영역에 나뉘에서 올라간다.
메모리 영역.
1. 메소드 영역 : 클래스 로딩시 static 필드 및 static 블록 실행. 메소드 코드, 생성자 , 바이트 코드
2. 힙(Heap) : 객체마다 별도의 인스턴스 필드가 할당됨.
3. 스택 : 지역변수, 매개변수.
메소드 영역은 프로그램이 종료될때 까지 유지된다.
힙은 해당 객체의 라이프사이클과 같이 하며, 스택역시 변수의 라이프사이클과 그 생명을 같이 한다.
static 과 인스턴스 필드, 블럭의 실행순서를 하기 예제코드로 알아본다.
package com.study;
public class staticInstance {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("3.main() 실행");
staticInstance obj1 = new staticInstance();
staticInstance obj2 = new staticInstance();
}
staticInstance(){
System.out.println("6.생성자");
}
static int staticVar = initializeStatic();
int instanceVar = initializeInstance();
static int initializeStatic() {
System.out.println("1.static 변수 초기화");
return 100;
}
int initializeInstance() {
System.out.println("4.Instance 변수 초기화");
return 200;
}
//static 초기화 블럭
static {
System.out.println("2.static 초기화 블럭");
}
//인스턴스 초기화 블럭
{
System.out.println("5.Instance 초기화 블럭");
}
}
결과 이다.
1.static 변수 초기화
2.static 초기화 블럭
3.main() 실행
4.Instance 변수 초기화
5.Instance 초기화 블럭
6.생성자
4.Instance 변수 초기화
5.Instance 초기화 블럭
6.생성자
위 코드에서 메모리 로딩 순서를 정리하자면,
1. 클래스 로딩시 (static 멤버) 가 먼저 로딩된다.
1-1. static 변수 초기화
1-2. static 블록 실행
이 단계는 한번만 실행되며, 클래스가 메모리에 로드될때 수행된다.
2. main()실행
3. 객체 생성시(인스턴스 멤버)
3-1. 인스턴스 변수 초기화
3-2. 인스턴스 블럭 실행
3-3. 생성자 실행.
결론은,
1. static 필드 및 블럭은 클새스 로드시 한번만 실행된다.
2. main() 실행후, 객체가 생성될때마다 인스턴스 필드, 인스턴스 블록, 생성자 순으로 실행된다.
3. 새로운 객체를 만들면 인스턴스 관련 코드만 새롭게 실행되며, static 부분은 실행되지 않는다.
'앱 만들기 > Java' 카테고리의 다른 글
자바 싱글톤 만드는 방법 (2) | 2025.02.07 |
---|---|
byte a = 10+20 이 컴파일 에러가 발생하지 않는 이유 (1) | 2025.01.20 |
자바 키보드로 문자열 입력받기 (0) | 2025.01.08 |
이클립스 자동 import 설정방법 (0) | 2025.01.07 |
자바 키보드로 입력받기 (0) | 2025.01.06 |
댓글