github.com/whiteship/live-study/issues/1
목표자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것
|
1. JVM이란 무엇인가
JVM : 자바 가상 머신
운영체제는 자바 프로그램을 즉시 실행하는 것이 아니라, 컴파일러를 통해 바이트코드로 번역된 클래스 파일을 해석하여 실행한다.
다양한 운영체제에 맞는 기계어로 해석하여 실행해주는 가상의 운영체제가 JVM( Java Virtual Machine ) 이다.
따라서 개발자는 운영체제에 독립적으로 자바 프로그램을 개발할 수 있다.
바이트코드는 모든 JVM 환경에서 동일한 결과를 보장하지만, JVM은 운영체제에 종속적이기 때문에 각 환경에 맞게 설치되어야 한다.
Write once, run anywhere
2. 컴파일 하는 방법 & 3. 실행하는 방법
컴파일 & 실행하기
// text 편집기에서 java 코드 작성
Class TestHelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
// .java 파일을 .class 파일로 컴파일한다. (javac 명령어)
javac TestHelloWorld.java
// 컴파일된 .class파일을 실행한다. (java 명령어. 자바 인터프리터)
java TestHelloWorld
// Hello World! 가 출력된다
+ IDE에서 손쉽게 컴파일 & 실행이 가능하다.
+ javap : 역컴파일 명령어
4. 바이트코드란 무엇인가
바이트코드 명령어 리스트 : Java bytecode instruction listings
바이트코드 : 자바 코드를 컴파일하여 생성되는 코드. 자바 가상 머신이 이해할 수 있도록 번역된 코드.
5. JIT 컴파일러란 무엇이며 어떻게 동작하는가
JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.
출처 : ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC
6. JVM 구성 요소
클래스로더 시스템
- .class 에서 바이트코드를 읽고 메모리에 저장
- 로딩 : 클래스에서 읽어오는 과정
- 링크 : 레퍼런스를 연결하는 과정
- 초기화 : static 값을 초기화 및 변수에 할당
메모리
- 메소드 영역 : 클래스 수준의 정보 ( 클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장. 공유 자원
- 힙 영역 : 객체 저장. 공유 자원
- 스택 영역 : 쓰레드 마다 런타임 스택을 생성. 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓음. 쓰레드가 종료되면 런타임 스택도 사라짐
- PC( Program Counter) 레지스터 : 쓰레드마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성
- 네이티브 메소드 스택 : C, C++로 구현된 메소드 (구현된 interface API : JNI)
출처 : 더 자바, 코드를 조작하는 다양한 방법 ( 백기선님 강의)
7. JDK와 JRE의 차이
Java SE의 두가지 버전의 구현체.
- JRE( JAVA Runtime Environment ) 자바 런타임 환경 : JVM + 표준 클래스 라이브러리 API (컴파일러 미포함). 프로그램 실행에 필요한 도구만 포함. 개발된 프로그램만 실행한다면 JRE 설치해도 된다.
- JDK(JAVA Development Kit) : JRE + 개발에 필요한 도구(라이브러리 API , 컴파일러 등)
'Programming > Java' 카테고리의 다른 글
[whiteship 온라인 스터디] 3주차 과제: 연산자 (0) | 2020.12.26 |
---|---|
[whiteship 온라인 스터디] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.12.26 |
[JAVA] List to Array & Array to List ( 리스트와 배열 convert하기) + String 과 char 배열 변환 (0) | 2020.12.07 |
[정규표현식 In Java] 정규표현식 검색 패키지 - regex 소개 및 예제 (0) | 2020.12.06 |
[정규표현식 In Java] 자바의 정규 표현식 및 참고 사이트 (0) | 2020.12.06 |