HeadCopter

[Java] 메모리 구조 본문

Java

[Java] 메모리 구조

JungMonkey 2022. 7. 23. 20:32

자바 메모리 구조

- 모든 자바 프로그램은 자바 가상 머신(JVM)을 통해서 실행한다.

 자바 프로그램이 실행되면, JVM은 운영 체제로부터 해당 프로그램을 수행할 수 있도록 필요한 메모리를 할당 받는다.

- 할당받은 메모리를 JVM은 용도에 따라 구분하여 관리한다.

출처 : :http://www.tcpschool.com/java/java_array_memory

 

메서드 영역

- 이 영역에서는 자바 프로그램에서 사용되는 클래스에 대한 정보와 함께 클래스 변수(static variable)가

 저장되는 영역이다.

- JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일(*.class)을 읽어들여서 

 해당 클래스에 대한 정보를 메소드 영역에 저장한다.

 

*Static ? 

- 고정된 의미라는 뜻을 가지고 있는 Static으로 Java에서는 Static 변수와 Static 메서드를 만들 수 있다.

- Static을 사용한다는 의미는 모든 객체가 '공유'한다는 의미를 뜻한다. 

- 모든 인스턴스가 같은 값을 공유하게 하고 싶을 때 해당 변수를 클래스의 멤버로 만들어 사용하면 된다.

 Class 내부에서 Static 키워드를 해당 멤버 앞에 붙이면 클래스의 멤버가 된다. 

 즉, 해당 클래스 소속의 변수가 된다. 

- Static은 클래스가 메모리 영역에 올라갈 때 실행이 된다. JVM이 로딩되면 클래스는 특별한 일이 발생하지 않는 이상

 메모리상에서 객체를 생성할 수 있도록 메모리에 대기하고 , static은 객체의 생성과는 관계없이 클래스가 JVM을 통해 

로딩되는 시점에 한번의 필요한 동작을 처리하기 위해 사용된다. 

- 이런점을 이용하여 항상 값이 변하지 않는 경우 Static을 사용하면 메모리 자원에 대한 이점을 얻을 수 있다.

 

Stack ?

- 스택 영역은 자바 프로그램에서 메서드가 호출될 때 메서드의 스택 프레임이 저장되는 영역이다.

- JVM은 자바 프로그램에서 메서드가 호출되면 , 메서드의 호출과 관계되는 지역 변수와 매개변수를 Stack 영역에 저장한다. 이렇게 Stack영역은 메서드의 호출과 함께 할당되며 메서드의 호출이 완료되면 소멸한다. 

- Stack 영역은 push 로 데이터를 저장하고 , pop 으로 데이터를 꺼낸다.

- LIFO(Last-In First_Out) 후입선출 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 꺼내진다.

 

Heap ? 

- heap 영역은 자바 프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역이다.

- JVM은 자바 프로그램에서 new 연산자를 사용하여 인스턴스가 생성되면, 해당 인스턴스의 정보는 heap 영역에 저장된다. 

 

 

 

 

 

 

 

 

 

 

 

공부를 마치며....

자바 메모리 구조에 대하여 오늘 조사했고 개념을 공부하였는데 아무래도 이 부분에 대해서는 

더 공부하고 디테일하게 알면 좋을거 같다는 생각을 하였다. 그래서 다음번에는 JVM이 동작할 때 

어떻게 각 메모리 영역을 할당하고 어떤 일을 수행하는지 정리해서 올려봐야겠다.

 

'Java' 카테고리의 다른 글

Java 클래스 만들기(1)  (0) 2024.06.18
Spring 개념 정리(1)  (0) 2023.02.07
Class와 객체(Object) 개념  (0) 2022.07.27
[Java]생성자 (Constructor)  (0) 2022.07.25