JAVA 실행 방식
JAVA 실행 방식

1) 파일 확장명이 .java인 텍스트 파일을 생성하고 자바 언어로 코드를 작성한다.
2) 자바 소스 파일을 컴파일러인 javac 명령어로 컴파일 한다.
3) 컴파일이 성공하면 확장명이 .class인 바이트 코드 파일이 생성된다.
*바이트 코드 파일은 완전한 기계어가 아니므로 운영체제에서 바로 실행할 수 없음
4) java 명령어를 사용해서 바이트 코드를 완전한 기계어로 번역해서 실행한다 ----> JVM(바이트 코드를 운영체제에서 바로 실행할 수 있게 도와주는 번역기 역할)
JVM(Java Virtual Machine)
JVM이란?
-JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부른다. 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다.
*기계라는 표현은 있지만 하드웨어가 아니고 소프트웨어이다.
자바가 JVM을 사용하는 이유
-바이트 코드 파일을 다양한 운영체제에서 수정하지 않고 사용할 수 있도록 하기 위함이다.
JVM의 구조
자바 실행과정에서 구체적으로 JVM의 실행과정을 살펴보면,
총 4부분으로 구성된다.
-Garbage Collector
-Execution Engine
-Class Loader
-Runtime Data Area

1) Class Loader
Class Loader는 class 파일을 JVM이 운영체제로부터 할당받은 메모리 영역 (Runtime Data Area)에 적재하는 역할을 한다.
2) Execution Engine
Class Loader에 의해 메모리에 적재된 바이크 코드의 클래스들을 기계어로 변경해 명령어 단위(Operation Code)로 실행하는 역할을 한다.
3) Garbage Collector
Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수 없다.
4) Runtime Data Area
JVM의 메모리 영역으로 Java 애플리케이션 실행시 사용되는 데이터를 적재하는 영역이다. 크게 5가지 영역으로 구분된다.
(1) Method
모든 쓰레드가 공유하는 메모리 영역이이다. 메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관한다.
(2) Heap
모든 쓰레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역이다. 또한, 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.
(3) Stack
-메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성한다.
-메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다.
-마지막으로, 메서드 수행이 끝나면 프레임별로 삭제한다.
(4) PC register
쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재한다. 쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 갖는다.
(5) Native Method Stack
자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.
Reference
JVM 구조와 자바의 실행방식
JVM 구조와 자바의 실행방식
err0rcode7.github.io
https://steady-coding.tistory.com/305
JVM 메모리 구조란? (JAVA)
안녕하세요? 코딩 중독입니다. 오늘은 JVM 메모리 구조에 대해 알아보겠습니다. JVM이란? JVM 메모리 구조를 설명하기 전에 JVM이 무엇인지 알아야 합니다. JVM은 Java Virtual Machine의 약자로, 자바 가상
steady-coding.tistory.com
'Study' 카테고리의 다른 글
[JAVA]라이브러리와 프레임워크 차이 (0) | 2022.02.09 |
---|---|
[JAVA]제네릭이란? 사용 방법, 사용 이유 (0) | 2021.12.28 |
[JAVA]ajax란 무엇인가? (0) | 2021.12.26 |
[JAVA]Static vs Final 차이(cf. Finally, Finallize()) (0) | 2021.12.26 |
[Study / JSPProject]폴더 (0) | 2021.10.21 |