JAVA 공부하기 68

JVM 메모리 모델

 

힙(Heap)

- 자바에서 객체를 저장 할 때 사용하는 메모리 공간

 

- new를 이용하여 생성된 객체 저장

: 객체, 배열, String

: new 이용하여 힙 안에 그만한 크기의 영역을 확보

* A a = new A();

* int a = new int[]{1,2,3};

* String str = new String("haha");

 

 

JAVA공부하기 67

JVM 메모리 모델

 

- main 메서드에서 sum 메서드를 호출할 때의 메모리 상태

: main 메서드에서 a,b매개변수를 이용하여 sum 메서드를 호출합니다.

 

- main 메서드에서 사용하는 a,b변수와 sum 메서드에서 사용하는 a,b매개변수의 이름은 같지만, 스택프레임 때문에 구분하여 상용

 

 

 

- sum 메서드에서 main 메서드로 리턴할 때의 메모리 상태

: sum 메서드의 수행이 끝나고 sum 메서드를 호출한 main 메서드로 되돌아 올 때, sum 메서드를 위해 할당했던 스택 프레임을 해제합니다.

: 이렇게 함으로써 main 메서드에서 정의한 a, b, c등과 같은 변수를 사용할 수 있도록 합니다.

 

 

 

 

JAVA공부하기 66

 

JVM 메모리 모델

 

- MemoryModeltest 클래스를 로딩할 때 메모리 상태

: 자바 가상머신은 MemoryModelTest 클래스를 메모리에 로드

 

- 프로그램을 실행하기 위한 초기작업 수행

: 클래스 구성 요소가 메서드 영역에 적재

 

 

 

- 자바가상머신이 main메서드를 호출할 때 메모리 상태

: main 메서드가 호출되면 main 메서드를 위한 스택 프레임이 할당된다.

: main 메서드 내에서 사용되는 매개변수, 지역변수 등이 main 스택 프레임에 위치하게 된다.

 

 

 

JAVA공부하기 65

JVM메모리 모델

 

스택 영역(Stack area)

 

- 스택(Stack)이란 일반적으로 "무엇인가 쌓아 올려가는 데이터 구조"를 가리킨다.

: LIFO(Lastr-In-First-Out)특성

 

-  메소드가 호출되어 수행 될 때, 매개변수, 지역변수, 임시변수, 리턴 값 등을 저장하기 위한 공간

 

- 메소드 호출과 함께 메모리 공간할당, 메소드 수행을 마칠 때 시스템에 반환

: 잠시 쌓아두는 곳

 

- JVM은 스택 영역을 실행중인 스레드에 따라 개별적으로 구성한다.

 

 

 

 

자바공부하기 64

JVM 메모리 모델

 

메소드 영역(Method area)

- 공유 메모리 영역이라고도 한다.

 

- 클래스의 메소드에 대한 바이트코드, 클래스의 전역변수인 클래스 병수(static)위치

 

- JVM에서 실행되고 있는 모든 스레드에 의해 공유

 

- JVM은 복수개의 스레드가 메소드를 정상적으로 사용하기 위해 동기화(synchronization)기법 제공

 

- static 필드(클래스 변수)

: 각 클래스의 static 필드가 확보

: 사용을 위해 클래스 이름으로 호출 시 메모리에 적재

 

- 바이트 코드(메서드)

: 메서드의 실행 로직에 대한 바이트코드가 메모리로 적재되는 공간

: 실행 로직이 메모리에 적재되야 cpu가 fetch할 수 있음

: 자바의 모든 로직은 메서드에만 존재

* 클래스는 ㅣㄹ드와 메서드로만 구성되어있기 때문

: 메서드에 대한 바이트코드도 static 필드와 마찬가지로 클래스를 객체 생성할 시점에 메모리에 적재(예외: main())

 

- 장점

: 기동시간의 단축

: 끝까지 사용되지 않은 클래스(필드, 메서드)가 있을 경우 메모리를 절약

 

- 메서드 영역은 프로그램이 시행되기 시작되기 시작할 때부터 끝날 때까지 계속 존재하는 것이라고 보면 된다.

 

- 다른 메모리 영역과의 차이

: 스택(Stack)과 같이 필요에 의해 임시적으로 생성되고 사라지지도 않고 힙(Heap)안의 객체와 같이 실행 시 확보되지 않고 계속해서 정적으로 존재

: 또한 스택은 스레드 별로 존재한다.

 

 

 

자바공부하기 63

 

JVM 메모리 모델

 

- 어플리케이션 프로그램을 만들 때 메모리나 어드레스 같은 낮은 수준의 사항을 너무 의식하면 안된다.

 

- 그것을 의식하지 않은 언어일수록 고급언어이며, JAVA도 그러한 고급언어에 속한다.

 

- 그러나 JAVA를 확실하게 이해하려면 메모리의 사용법을 어느정도 이해하는 것이 좋다 생각한다.

 

 

자바공부하기 62

 

생성자 예

 

public class platoon { //소대

private String name;

public Platoon() { //보통 4분대

name= "Platoon";

}

public Platoon(String name){

this.name=name;

}

public String getPlatoonName(){

return name;

}

public void showPlatoonName(){

System.out.println("The "+name+" platoon. ");

}

}

 

 

 

 

자바공부하기 61

 

생성자 예제_1

 

 

 

생성자 예제_2

 

 

 

+ Recent posts