우아한 테크톡
[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, 이전 스택 프레임에 대한 정보, 현재 메서드가 속한 클래스 / 객체에 대한 참조 등의 정보를 갖는다. |
< 영상 >