728x90

객체지향 프로그래밍 시작하기


Static 과 메모리의 관계를 알아보도록 해보자

이 글의 목표는 static 키워드와 메모리 관계에 있어서 이해를 돕고자 또한, JVM 에 사용하는 메모리 모델을 통해 자바 프로그래임이 어떤식으로 동작하는지에 대한 원리를 학습하는것을 목표로 합니다. 


1. static 과 메모리의 관계

2. static 멤버 들의 접근 방법

3. private 생성자와 static과의 관계

4. JVM 이 상요하는 메모리 영역

5. class, object, instance의 상호관계

 

1. static 과 메모리의 관계

메인(시작) 클래스는 왜 객체 생성(new)없이 실행이 되나요?

public class StaticTest {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

메인(시작) 클래스가 동작 되는 방식을 이해 해야 됩니다. 

1. JVM이 실행할 클래스를 찾는다. 찾았다면...->

2. static 키워드가 붙어있는 멤버들을 정해진 메모리(static-zone)위치에 한번 자동으로 로딩한다.

   -> static멤버들은 클래스를 사용하는 시점에서 딱 한번 메모리에 로딩된다는 점이 중요합니다.

   -> 여기서는 main() 메서드가 static 이기 때문에 메모리에 자동으로 로딩한다.

3. JVM 이 static-zone에서 main()메서드를 호출한다.

4. 호출된 메서드를 Call Stack Fame Area(Stack Area)에 push(기계어코드를 넣고) 한 뒤 동작을 시작하면됩니다. 

 

* Call Stack Frame Area 

- 메서드가 호출되면 호출된 기계어코드가 push 되고 실행되는 메모리 공간

- 현재 프로그램이 실행되고 있는 상태를 파악할수 있다.

- LIFO(Last-In-First-Out) 구조이다.

* PC 는 현재 수행중인 프로그램 위치 입니다. 

* 프로그램 종료

- stack에 아무것도 없으면 프로그램이 종료됨.

* 지역변수는 메서드와 동일한 생명주기(life-cycle)을 가진다.

 

4. JVM 이 상요하는 메모리 영역

Method Area 에는 static-zone 과 non-static-zone으로 나뉘는데

메서드의 바이트코드가 할당되는 공간이 메소드영역이고 

static 멤버들은 static-zone으로 할당됩니다.

Heap 영역은 실제 객체가 생성되는 메모리 공간(new 연산자)

GC(gabage collector)에 의해서 메모리가 수집됩니다.

 

Thread -Statck Area

(Call stack Frame Area)

PC register, Native Method Area 

는 메서드가 호출되면 메서드의 기계어코드를 할당받고(Native Method Area)메서드가 실행되는 메모리 공간(Call Stack Frame Area)

(지역변수, 매개변수들이 만들어지는 공간)

PC(Program Counter)에 의해서 현재 실행중인 프로그램의 위치가 관리된다.

LIFO 구조로 운영되는 메모리 공간(메서드의 호출 순서를 알 수 있다.)

 

Runtime Constant Pool

(Literal Pool)

상수 값 할당이 되는 메모리 공간 문자열 중 문자열 상수가 할당되는 메모리 공간

 

728x90
복사했습니다!