우아한 테크톡

[10분 테코톡] 🎅무민의 JVM Stack & Heap

dauneee 2022. 1. 8. 23:37

JVM이란?

 

일단 C / C++는 컴파일 플랫폼과 타깃 플랫폼이 다를 경우, 프로그램이 동작하지 않는다.


- 동일한 플랫폼에서 컴파일과 실행을 같이 한다면, 프로그램은 아무 문제없이 동작된다.

- 플랫폼이 달라질 경우, 타깃 플랫폼에서 프로그램이 동작하지 않는다. ( 배포할 때 문제 발생 )

- 타깃 플랫폼에 맞추어 컴파일 하는 것을 " 크로스 컴파일 "이라 한다.

 : 자바 바이트코드는 타깃 플랫폼에 상관없이 JVM위에서 동작한다.

   물론, JVM은 타깃 플랫폼에 의존한다.

 

 

< 사용 이유 >

 


- 자바는 네트워크에 연결된 모든 디바이스에서 작동하는 것이 목적이었다.

- 디바이스마다 운영체제나 하드웨어가 다르기 때문에, 
자연스럽게 플랫폼에 의존하지 않도록 언어를 설계했다. 그 결과가 Java Bytecode, Jvm

 

 

< jvm의 내부 구조 >

 


-jvm이  Java Bytecode를 실행하기 위해서는 사용하는 메모리 공간 필요 → 모든 스레드가 공유

- 클래스 로더가 클래스 파일을 읽어오면 클래스 정보를 파싱 해서 Method Area에 저장

- 프로그램을 실행하면서 생성한 모든 객체를 Heap에 저장


 

 

< Stack Frame >

 


- 스택 프레임은 메서드가 호출될 때마다 새로 생겨 스택에 Push 된다.

- 스택 프레임은 Local variables array, Operand stack, Frame Data를 갖는다.

- Frame Data는 Constant Pool, 이전 스택 프레임에 대한 정보, 현재 메서드가 속한 클래스 / 객체에 대한 참조 등의 정보를 갖는다.

 

 

 

 

 

 

 

 

 

< 영상 >

 

https://youtu.be/UzaGOXKVhwU