티스토리 뷰

1. 자바 가상 기계 (JVM) 정의


 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 운영체제가 바로 자바 프로그램을 실행할 수 없다.

 바이트 코드를 해석하고, 실행할 수 있는 가상의 운영체제 역할을 수행하는 것이 바로 JVM 이다. JVM은 OS와 자바 프로그램의 중간 다리 역할 수행하기 

 때문에 개발자는 운영체제별로 자바 코드를 구현할 필요가 없다. 각 각의 운영체제에도 동일한 결과를 출력해준다. (운영체제에 종속적, 자바코드에는 독립적)


2. 자바 가상 기계 (JVM) 동작 순서


 1. Class loader는 바이트 코드(Hello.class)를 JVM 으로 가져오는 역할을 수행

 2. Executuion Engine이 바이트 코드를 해석하여, Runtime Data Area에 메모리를 할당

 3. 스레드 동기화 및 메모리 관리(Garbage Collector) 작업 수행


3. Runtime Data Area 구조


 자바 프로그램을 실행하기 위해 운영체제에게 할당받은 공간

 PC Register, Java Virtual Machine Stacks, Method Area, Heap, Native Method Stacks 로 구성


 1) Method Area (Class Area, Code Area)

 Class loader가 실행되면 클래스, 인스턴스 변수, 메소드, 클래스 변수 등이 Method Area에 저장!

 프로그램이 실행되면 모든 코드들이 저장되는 것이 아닌, new 연산을 통해 동적으로 저장이 된다. 단지 코드들에 대해 텍스트 파일로만 저장을 하고 있다.

  - Field Information : 접근제한자, 데이터 타입, 변수명 정보 저장(예 : public int a;)

  - Method Information : 접근제한자, 리턴 타입, 매겨변수 타입, 메소드 명 정보 저장(public int test(char a) {})

  - Type Information : 클래스와 인터페이스에 대한 정보. 접근제한자, (패키지명 + 클래스), 클래스의 상위 클래스 정보 저장 (public class dog extends animal)

  - Constant pool : Type(클래스 또는 인터페이스)에서 사용된 상수 정보 저장

  - class variable : static이 붙어있는 변수. 인스턴스 생성없이 바로 사용 가능


 2) Stack Area

  - LIFO(Last Input First Out)

  - 메소드가 호출될때마다 각각 스택에 쌓임

  - 호출된 메소드의 파라미터, 지역변수, 리턴값 저장


 3) Heap Area

  - new 연산자로 생성된 객체 및 배열 저장

  - Garbage Collector에 의해 메모리를 반환


 4) PC Register

  - Thread가 생성될때마다 생성되는 공간으로, Thread가 수행하는 명령 정보 저장


'Java' 카테고리의 다른 글

멀티스레드  (0) 2018.10.27
예외처리2 - 사용자 정의 예외 클래스 생성  (0) 2018.10.04
예외처리1 - 오류와 예외  (0) 2018.10.04
Java equals() & hashCode()  (3) 2018.10.04
Package & Import  (0) 2018.09.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함