Backend/Java

[Java] JVM 메모리 구조 / JVM 수행 과정

hyeminyy 2024. 9. 5. 22:47
728x90

JVM 메모리 구조

응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고,

JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

그 중 3가지 주요 영역(method area, call stack, heap)이다.

 

1. Method Area (메소드 영역)

 - 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래스 변수(class variable)도 이 영역에 함께 생성된다.

 

2. Heap (힙)

 - 인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.

 

3. call Stack (호출 스택)

 - 호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수 (매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 비워진다.

 

수행과정

  • 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당 받는다.
  • 메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.
  • 호출스택의제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
  • 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.

 

JVM 예시 코드

 - main()이 firstMethod()를 호출하고 firstMethod()는 secondMethod()를 호출한다. 객체를 생성하지 않고도 메서드를 호출할 수 있으려면, 메서드 앞에 'static'을 붙여야 한다.

결과

 

그림판 죄송함다

  1. JVM에 의해서 main메서드가 호출됨으로써 프로그램이 시작된다. 호출스택에는 main메서드를 위한 메모리공간이 할당되고 main메서드의 코드가 수행되기 시작한다.
  2. main메서드에서 firstMethod()를 호출한 상태이다. 아직 main메서드가 끝난 것은 아니므로 main 메서드는 호출스택에 대기상태로 남아있고 firstMethod()의 수행이 시작된다.
  3. fisrtMethod()에서 secondMethod()를 호출했다. firstMethod()는 secondMethod()가 수행을 마칠 때까지 대기 상태에 있게 된다. secondMethod()가 수행을 마쳐야 firstMethod()의 나머지 문장들을 수행할 수 있기 때문이다.
  4. secondMethod()에서 println()을 호출했다. println메서드에 의해 'secondMethod()'가 화면에 출력된다.
  5. println메서드의 수행이 완료되어 호출스택에서 사라지고 자신을 호출한 secondMethod()로 되돌아간다. 대기 중이던 secondMethod()는 println()을 호출한 이후부터 수행을 재개한다.
  6. secondMethod()에 더 이상 수행할 코드가 없으므로 종료되고, 자신을 호출한 firstMethod()로 돌아간다.
  7. firstMethod()에도 더 이상 수행할 코드가 없으므로 종료되고, 자신을 호출한 main메서드로 돌아간다.
  8. main메서드에도 더 이상 수행할 코드가 없으므로 종료되어, 호출스택은 완전히 비워지게 되고 프로그램은 종료된다.

 

위 코드로 각 메서드의 시작과 종료의 순서를 확인할 수 있다.

 

 

Java 메모리 구조에 대해 추가 글은..

https://steady-developer-hyemin.tistory.com/26

 

[Java] 메모리 구조

메모리 구조를 공부하는 이유는 ? 1. 같은 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우된다. 2. 메모리 관리가 되지 않은 경우 속도저하 현상이나 튕김 현상 등이 일어날 수 있다. 3.

steady-developer-hyemin.tistory.com

 

728x90