Roel Notebook

[Java] 1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

by Roel Downey
728x90
반응형

백기선님의 온라인 자바 스터디를 하면서 !!

자세한 사항은 [ 여기 링크로 ]

스터디 링크 : 링크 

 

내가 스터디를 참여하는 이유는 자바를 공부하고 있지만 기초부터 차근차근 정리해 본적이 없어서 좋은 기회가 있어서 정리를 해보려고 한다. 단순히 내용을 찾아서 복사 붙여넣기 하는 공부가 아닌 내 방식대로 정리하려고 한다. 부족한 부분이나 잘못 적은 부분은 계속 수정 할 예정이다. 

 

 

목표

자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

학습할 것

  • JVM이란 무엇인가
  • 컴파일 하는 방법
  • 실행하는 방법
  • 바이트코드란 무엇인가
  • JIT 컴파일러란 무엇이며 어떻게 동작하는지
  • JVM 구성 요소
  • JDK와 JRE의 차이
  • javac 옵션 조사

 

JVM이란 무엇인가

Java Virtual Machine의 약자로 바이트 코드를 OS에 특화된 코드로 변환하여 실행한다.

- [위키 백과] : 링크

 

컴파일 하는 방법

코드를 컴퓨터가 이해할 수 있는 상태로 변환해 하는 과정이 컴파일 이라고 한다.

자바의 컴파일러는 javac라는 이름을 가지고 있다.

->  javac HelloWorld.java

 

실행하는 방법

자바 bin 디렉토리에 있는 java명령으로 실행

->  java [-classpath] HelloWorld

바이트코드란 무엇인가

JVM이 이해 할 수 있는 언어로 변환된 코드이다.

자바 코드를 배포하는 가장 작은 단위이며 확장자는 .class 이다.

JIT 컴파일러란 무엇이며 어떻게 동작하는지

- [ 참고 ] : 더 자바, 코드를 조작하는 다양한 방법

인터프리터 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그 다음부터 인터프리터는 네이티브코드로 컴파일 된 코드를 바로 사용​

 

JVM 구성 요소

- [ 참고 ] : 더 자바, 코드를 조작하는 다양한 방법

크게 클래스 로더 시스템과 메모리와 실행엔진과 네이티브 메소드 로 구분한다. 

 

클래스 로더 시스템은 컴파일을 한 .class에서 바이트코드 를 읽어들여서 메모리에 적절하게 나눠준다.

로딩 : 클래스 읽어오는 과정

링크 : 레퍼런스를 연결하는 과정

초기화 : static 한 값들 초기화 및 변수 할당 한다.

 

메모리 영역에는 클래스 수준의 정보 ( 클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장

- 힙 영역 : 객체를 저장

- 스택 영역 : 쓰레드마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료시 런타임 스택 사라진다.

- PC 레지스터 : 쓰레드마다 쓰레드 내 현재 실행 할 instruction의 위치를 가리키는 포인터가 생성

- 네이티브 메소드 스택

 

실행 엔진

- 인터프리터

- JIT 컴파일러

- GC(Garbage Collector)

 

네이티브 메소드 : 인터페이스 (JNI) , 라이브러리

 

JDK와 JRE의 차이

JDK(Java Devlopement Kit) : JRE + JDT

JRE(Java Runtime Environment) : 자바 애플리케이션을 실행할수 있도록 구성된 배포판 (JVM + 라이브러리) 이며, 개발 관련 도구는 포함하지 않는다. 

JDT(Java Development Tools) : 개발에 필요한 툴 (컴파일러 , 디버거와 같은 개발 도구들이 포함되어 있다.)

 

 

Javac 옵션 조사

 

 

- classpath : 컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일을 찾기 위해서 컴파일시 파일 경로를 지정

- d : 클래스 파일을 생성할 루트 디렉토리 지정

- deprecation : 소스 코드 내에서, 사용되어진 deprecated API 위치 출력

- encoding : 소스파일에 사용된 문자열 인코딩 설정

- g : 모든 디버깅 정보를 생성시킨다.

- nowarn : 경고 메시지를 생성시키지 않는다.

- sourcepath : 소스파일의 위치를 지정

- target : 지정된 자바 버전이 VM에서 작동 되도록 클래스 파일을 생성

 

 

 

 

 

 

728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기