Myo-Kyeong Tech Blog

[ JAVA ] JAVA 클래스 변수와 인스턴스 변수 생성 시점과 메모리 영역 본문

Programming/Java

[ JAVA ] JAVA 클래스 변수와 인스턴스 변수 생성 시점과 메모리 영역

myo-kyeong 2023. 6. 13. 15:12
728x90

 

https://wikidocs.net/102803

 

클래스 변수 (Class Variables)

  • 클래스의 모든 인스턴스가 공유하며, 이 변수들은 클래스가 메모리에 로드될 때 생성
  • 클래스 변수는 JVM의 Method Area라고 불리는 영역에 저장됨
  • 한 번 로딩된 클래스는 중복해서 로딩되지 않음.

 

인스턴스 변수 (Instance Variables)

  • 해당 클래스의 객체(인스턴스)가 생성될 때마다 메모리에 생성
  • 인스터스 변수는 Heap 메모리 영역에 저장됨

 

클래스 변수와 인스턴스 변수 생성 시점과 메모리 영역 예시

 

public class Exam0140 {

  static class A {
    static int v1;
    int v2;
  }

  public static void main(String[] args) {

    A.v1 = 100;

    A p = new A();
    p.v2 = 200; // OK!

    A p2 = new A(); // 새 v2 변수가 생성
    p2.v2 = 300;

    System.out.printf("A.v1=%d, p.v2=%d, p2.v2=%d\n", A.v1, p.v2, p2.v2);
  }
}

 

1. 클래스 로딩 

  • 코드가 실행되기 시작하면, 먼저 'A' 클래스가 로드되며, 이 클래스에 선언된 클래스 변수인 'v1'이 메모리에 할당
  • 'v1'은 Method Area라는 메모리 영역에 할당되며 모든 인스턴스에서 공유

 

2. 클래스 변수 할당

  • 'A.v1 = 100;' 라는 코드가 실행되면, 'v1' 이라는 클래스 변수에 100이라는 값이 할당 

 

3. 인스턴스 생성

  • ' A p = new A();' 코드가 실행되면, 'A' 클래스의 인스턴스가 생성
  • 힙 메모리 영역에 위치
  • 'p'라는 참조 변수는 이 인스턴스를 가리키게 됨

 

4. 인스턴스 변수 할당

  • 인스턴스 생성 과정에서 'v2'라는 인스턴스 변수도 힙 영역 내에 생성
  •  'p.v2 = 200;' 코드를 통해 'v2' 변수에 200 값 할당

 

5. 두 번째 인스턴스 생성

  • 'A p2 = new A();' 코드를 통해 'A' 클래스의 또 다른 인스턴스가 생성
  • 또 다른 'v2' 인스턴스 변수가 힙 영역에 생성

 

6. 두 번째 인스턴스 변수 할당

  • 'p2.v2 = 300;' 코드를 통해 두번째 'v2' 변수에 300이라는 값 할당

 

7. 결과 출력

  • 마지막으로 'Sytstem.out.printf("A.v1=%d, p.v2=%d, p2.v2=%d\n", A.v1, p.v2, p2.v2); 코드 실행 

 

728x90