꾸준한 스터디
article thumbnail

프로그램을 실행시키기 위해서 컴퓨터 메모리에 실행시킬 데이터와 명령어들을 저장해야 한다.

자바 프로그램 역시 운영체제(OS)가 제어하고 있는 메모리(RAM)를 사용 및 할당받을 수 있어야 하는데 JVM(Java Virtual Muchine)이 H/W, OS위에서 동작하며 메모리를 할당받고 자바프로그램을 호출하여 실행한다.

 

  • Java 프로그램 실행 과정

개발자가 만든 .java 파일을 javac 명령으로 컴파일하면 .class 바이트 코드 파일이 만들어진다.

프로그램 실행하면 JVM은 OS로 부터 프로그램이 필요로 하는 메모리를 할당 받는다.

바이트 코드 파일을 Class Loader를 통해 동적으로 클래스를 로드하고 JVM 내로 로딩하여 검증 - 링크 - 초기화 과정을 거치고 Runtime Data Area 중 Method Area(Static Area)에 실행 가능한 상태로 데이터를 메모리에 적재한다. 여기에 배치된 바이트 코드를 다시 Class Loader를 통해 Execution Engine이 명령어 단위로 읽어서 기계가 알아들을 수 있는 바이너리 코드로 변환하여 프로그램을 실행한다.

 


 

  • Runtime Data area 메모리 영역

Method Area or Static Area or Class Area

모든 스레드가 공유하는 영역으로 JVM이 시작될 때 성성된다.

메서드 영역에는 2가지 영역으로 나뉘는데 code 세그먼트와 data 세그먼트로 나뉘는데

code 세그먼트에는 JVM이 읽어들인 각각의 클래스와 인터페이스에 대한 런타임 상수 풀, 필드와 메서드에 대한 바이트 코드 등을 메모리에 보관한다. 보관만 하는 것일 뿐 실제로 사용하려면 new 객체 생성으로 메서드 영역에 코드들을 읽어서 Heap영역에 인스턴스로 생성되어야 사용할 수 있다.

data 세그먼트는 static 필드와 static 메서드에 사용 가능한 상태로 할당되어 객체생성 없이 사용 가능한 객체들이다. 프로그램이 종료될 때까지 사용할 수 있다.

 

Stack Area

각각 스레드가 시작될 때 하나씩 생성되어 단일 스레드당 메서드가 호출될 때 메모리를 차지한다. 메서드가 호출되면 메서드와 메서드 정보는 Stack Frame이 생성되어 해당 스레드의 Stack Area에 추가되고 메서드가 종료되면 해당 Stack Frame이 제거된다. 메서드 정보, 지역변수, 매개변수, 연산 중 발생하는 임시데이터를 저장하는 공간이다.

데이터 타입이 primitive type 이면 해당 메모리 공간에 값이 직접 들어가지만 reference type 객체를 new로 생성하게 되면 인스턴스가 Heap 영역에 생성되고 해당 인스턴스 주소값이 저장된다.

 

 

Heap Area

클래스 인스턴스와 Array에 대한 메모리를 관리한다. 가비지 컬렉터에 의해 관리되는 메모리 영역이다.

-eden : 인스턴스가 최초 생성되면 할당되는 공간. 이 곳에 인스턴스가 가득차면 가비지 컬렉션이 발생한다.

-Survivor0, 1 : eden 영역에서 가비지 컬렉션이 발생한 후 여전히 참조 객체로 남아있는 인스턴스들이 옮겨오는 공간.

-Old Generation : Yong Generation에서 살아남은 객체들이 저장되는 공간

-Permanenet : 생성된 객체들의 주소값이 저장된 공간. 클래스 로더에 의해 보관된 Class, Method 등에 대한 Meta 정보가 저장된다. (java 8부터 없어짐)

 

 

PC Registers

Thread가 생성될 때 마다 생기는 공간으로 현재 Thread가 실행되는 부분의 주소와 어떠한 명령을 실행하게 될지에 대한 부분을 기록을 한다.

JVM은 Stacks-Base 방식으로 작동 하는데, JVM은 CPU에 직접 Instruction을 수행하지 않고, Stack에서 Operand를 뽑아내 이를 별도의 메모리 공간에 저장하는 방식을 취하는데, 이러한 메모리 공간을 PC Registers라고 한다.

 

Native Method Stacks

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역.

보통 C/C++ 등의 코드를 수행하기 위한 스택. native 메서드의 매개변수, 지역변수 등을 바이트 코드로 저장

 

 

https://12216715011126.tistory.com/60

 

자바의 메모리 구조 영역 Method Heap Stack

0. JVM은 OS로부터 메모리를 할당받는다. - JVM은 할당받은 메모리를 영역지어서 관리한다. - OS로부터 받은 메모리를 Runtime Data Area라 칭한다. - Runtime Data Area는 5개 영역으로 구분짓는다. - Static Area,

12216715011126.tistory.com

https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

 

[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)

JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되

doozi0316.tistory.com

https://www.holaxprogramming.com/2013/07/16/java-jvm-runtime-data-area/

 

JVM의 Runtime Data Area · 안녕 프로그래밍

자바는 운영체제 독립적으로 JVM 환경에서 동작할 수 있도록 설계가 되어 있는 동적 언어 이다. 자바 프로그램이 시작되고 종료 될 때까지 자바의 소스코드가 어떠한 형태로 JVM의 메모리에 할당

www.holaxprogramming.com

https://steady-coding.tistory.com/305

 

JVM 메모리 구조란? (JAVA)

안녕하세요? 코딩 중독입니다. 오늘은 JVM 메모리 구조에 대해 알아보겠습니다. JVM이란? JVM 메모리 구조를 설명하기 전에 JVM이 무엇인지 알아야 합니다. JVM은 Java Virtual Machine의 약자로, 자바 가상

steady-coding.tistory.com

https://cafe.naver.com/jjdev/227

 

[18] 자바 메모리 구조

1. 메모리프로그램을 실행하기 위한 데이터 및 명령어를 저장하는 공간※ 메모리구조를 공부하는 이유- 같은 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우됨.- 메모리 ...

cafe.naver.com

https://steady-snail.tistory.com/67

 

[JAVA] JVM 동작원리 및 기본개념

JAVA라는 언어를 통해 코딩을 하고 있는 사람으로서 JAVA의 간단한 탄생배경 그리고 JAVA의 시작과 끝이라고 할 수 있는 JVM을 한 번 짚고넘어가려고 해요 우선 JAVA의 탄생배경을 좀 알고가면 이해하

steady-snail.tistory.com

https://coding-factory.tistory.com/828

 

[Java] 자바 JVM 내부 구조와 메모리 구조에 대하여

저번 포스팅에서는 JVM에 대해서 간략하게 알아보는 시간을 가졌다면 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 하겠습니다. 혹시 JVM의 정의와 왜 필요한지 궁금하시

coding-factory.tistory.com

https://smjeon.dev/categories/#etc

 

Archive

Jenkinsfile 9 분 소요 Jenkinsfile에 대한 작성 문서를 제 마음대로 번역한 문서입니다. 제 생각에 불필요하다고 생각하는 말은 제거하고, 가끔가다 제 생각이 몇 군데 들어있습니다. 정확한 정보를 원

smjeon.dev

https://jeong-pro.tistory.com/148

 

JVM 구조와 자바 런타임 메모리 구조 (자바 애플리케이션이 실행될 때 JVM에서 일어나는 일, 과정

JVM(Java Virtual Machine) : 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다.CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다.즉, 운영체제 위에서 동작하는 프로세스로 자바

jeong-pro.tistory.com

https://limkydev.tistory.com/51

profile

꾸준한 스터디

@StudyRecord

포스팅이 유익하셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!