티스토리 뷰

JVM (Java Virtual Machine)


JVM이란?

  • 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다.

  • 모든 자바 프로그램은 JVM 에서 실행 가능하다.

  • JVM은 OS로부터 메모리를 할당받아 자바 프로그램을 실행시킨다.

  • 자바 프로그램은 JVM을 거쳐야 하므로 OS에 직접 제어받는 방식의 프로그램(ex. C, C++)보다 속도가 느리다.

  • 자바 프로그램은 OS에 종속적이지 않고 JVM에 종속적이다.

 

JVM 구조

  • 자바 프로그램이 실행되면 JVM은 OS로부터 자바 프로그램 실행에 필요한 메모리(Runtime Data Area)를 할당받고, 할당받은 메모리를 용도에 따라 여러 영역으로 나눈다.

 

JAVA 컴파일러

  • java 소스로 작성된 코드를 Byte Code로 변환시킨다.

  • 확장자명이 .java 였던 파일이 .class(Byte Code)로 변화한다.

Class Loader

  • JAVA 컴파일러로부터 생성된 .class 파일들을 엮어 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재한다. (자바 애플리케이션이 실행중일 때 이런 작업이 수행된다.)

Execution Engine

  • Class Loader에 의해 적재된 클래스(Byte Code)들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.

Runtime Data area

  • 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

  • 크게 Static(Method) Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 나뉜다.

Static 영역

  • Class영역, Method 영역, Code 영역 등으로도 불린다.

  • 멤버 변수의 이름, 데이터 타입, 접근제어자에 대한 정보가 저장된다. (Field Information)

  • 메서드의 이름, 리턴 타입, 파라미터, 접근 제어자에 대한 정보가 저장된다. (Method Information)

  • Type의 속성이 Class인지 Interface인지의 여부를 저장한다. (Type Information)

  • Static 변수들을 저장 (모든 객체에서 공유할 수 있고, 객체 생성없이 접근 가능)

  • 공유할 수 있는 자원들이다. 즉, 다른 스레드에서도 공유할 수 있다는 의미이다.

Stack 영역

  • 메서드가 호출될 때마다 각각의 스택프레임(해당 메서드만을 위한 공간)이 생성된다.

  • 메서드 안에서 사용되는 값들 즉, 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등을 저장한다.

  • 또한, 참조변수와 참조변수에 할당된 힙 영역 객체의 주소값이 저장된다. (주소값을 통해 힙 영역에 생성된 객체를 참조할 수 있다.)

  • 공유자원이 아니다.

 

Heap 영역

  • new 연산자로 생성된 객체와 배열을 저장하는 공간이다.

  • Garbage Collector가 Heap 영역 내의 참조되지 않은 객체를 확인하고 제거한다.

  • 공유할 수 있는 자원들이다. 즉, 다른 스레드에서도 공유할 수 있다는 의미이다.

 

참고자료


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

https://12bme.tistory.com/142

'프로그래밍 언어 > Java' 카테고리의 다른 글

스트림 API  (0) 2019.06.24
람다식(Lambda expression)  (0) 2019.06.23
열거형  (0) 2019.06.20
제네릭스  (0) 2019.06.20
컬렉션 프레임워크  (0) 2019.06.18