JVM 이해

JESS YANG·2021년 6월 22일
0

자바

목록 보기
1/2

JVM

JVM(Java Virtual Machine)은 Java코드 또는 애플리케이션을 구동하기 위한 런타임 환경을 제공하는 엔진이다. Java바이트 코드를 기계언어로 변환해준다.

탄생 배경

자바 이전에 C/C++는 컴파일 플랫폼과 타겟 플랫폼이 다를 경우, 프로그램이 동작하지 않는다.
자바 바이트코드는 타겟 플랫폼에 상관 없이 JVM 위에서 동작한다.(JVM은 타겟 플랫폼에 의존한다)

"Write Once, Run Anywhere" - Sun Microsysthems

한번 작성한 코드(컴파일한 자바코드)를 어떤 플랫폼이든 다시 컴파일 할 필요 없이 실행시킬 수 있다!

위 그림에서와 같이 서로 다른 운영체제라도 JVM만 설치가 되있으면 같은 자바 프로그램이 문제 없이 동작한다.

내부 구조

  1. ClassLoader
  • 컴파일된 자바 클래스 파일을 JVM Runtime Data Area에 적재
  1. Method Aread
  • 클래스 로더가 클래스 파일을 읽어오면, 클래스 정보를 파싱해서 Method Area에 저장 한다. 메서드 영역은 모든 스레드가 공유하는 영역으로 JVM이 시작될 때 생성된다. 클래스 정보, 변수 정보, static으로 선언한 변수가 저장되고 모든 스레드가 공유하는 영역이다.
  1. Heap
  • 프로그램을 실행하면서 생성한 모든 객체(new 로 생성된) 인스턴스를 저장(GC의 대상이 되는 공간)
  • 효율적인 GC를 위해서 5가지 영역으로 나누어져있다.
  1. Stack
  • 스레드 별로 1개만 존재하고, 스택 프레임은 메서드가 호출될 때마다 생성된다. 메서드 실행이 끝나면 스택 프레임은 pop 되어 스택에서 제거 된다. 지역변수나 메서등의 매개변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역이다.
Person p = new Persion("JESS", "M");

위 코드에서 p 객체는 Stack area에 저장이 되고, new Person("JESS", "M")는 Heap 영역에 저장이 된다.
즉, 참조 변수는 Stack영역에 저장되고 인스턴스의 주소값을 저장 하고 있다.

  1. PC Register
  • 현재 수행중인 JVM의 명령어 주소를 저장하는 공간.
  1. Native Method Stacks
  • 자바 바이트 코드가 아닌 다른 언어로 작성된 메서드를 의미한다. JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 공간
  1. Execution Engine

  2. Native Method interface

  3. Native Method Libraries

참고문서
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0

0개의 댓글