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

LeeSeungHwan dev·2020년 11월 21일
0

-JVM이란 무엇인가
(JAVA Virtual Machine)
자바로 개발한 프로그램을 컴파일 하여 만들어지는 바이트 코드를 실행시키기위한 가상머신.
가상기계는는 소프트 웨어로 구현된 하드웨어를 뜻하는 넓은 의미를 가짐.
자바로 작성된 애플리케이션은 JVM에서만 실행되기 때문에 자바 애플리케이션이 실행되기 위해서는 JVM이 필요하다.
-컴파일 하는 방법
자바 컴파일러(javac.exe)를 사용해서 소스파일(test.java)로 부터 클래스 파일을 실행하여야한다.
-실행하는 방법
클래스 파일을 java 명령어로 실행한다.
ex)$ java test.class
-바이트코드란 무엇인가
자바 바이트 코드는 JVM 이 실행하는 명령어 집합이다.
-JIT 컴파일러란 무엇이며 어떻게 동작하는지
JIT 컴파일또는 동적 번역은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다.
인터프리트 방식과 정적 컴파일 방식으로 나눌수 있는데
인터프리트 방식은 실행중 프로그래밍 언어를 읽어 가면서 해당기능에 대응하는 기계어
코드를 실행하며 정적 컴파일은 실행하기전에 프로그램 코드를 기계어로 번역한다.
JIT컴파일러는 두가지 방식을 혼합한 방식으로 실행 시점에서 인터프리트 방식으로
기계어 코드를 생성하면서 그 코드를 캐싱, 같은 함수가 여러번 불릴때 기계어 코드를 생성
하는것을 방지한다.
-JVM 구성 요소

-Class Loader
.java 파일을 javac로 컴파일 하면 바이트 코드가 나온다. 이파일을 컴파일 타임이 아닌 동적메모리로 올려서 실행한다.
-Executiom Engine
Class Loader 에 의해 메모리에 로딩된 후에 Execution Engine이 주도한다. class파일을 해석한다.
-Runtime Data Area
Execution Engine에게 해석된 프로그램은Runtime Data Area에 배치되어 돌아간다.
-Gabage Collector
메모리를 관리해준다.
-JDK와 JRE의 차이
JDK는 자바 개발 키드 로 자바의 모든 기능을 갖추고 있으며
JRE의 기능을 포함할 뿐만 아니라 컴파일러 및도구 프로그램을 작성하고 컴파일 할수있다.
JRE는 자바 런타임 환경 으로JVM,java클래스 라이브러리,java 명령 및 기타인프라를 포함하여 컴파일된 Java프로그램 을 실행하는데 필요한 패키지이다.

javac 옵션
-classpath
컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스.
파일들을 찾기 위해서 컴파일시 파일경로를 지정해주는 옵션이다.
-d
클래스 파일을 생성할 루트 디렉토리 지정한다.
-encoding
소스파일에 사용될 문자열 인코딩을 설정한다.

-g
모든 디버깅 정보를 생성시킨다.
-verbose
컴파일러와 링커가 현재 어느 소스 파일이 컴파일 되고 있고,
어느 파일이 링크되고 있는지 그정보를 출력한다.

-deprecation
소스 코드 내에서 사용된 deprecationAPI 위치를 출력한다.

-sourcepath
소스 파일의 위치를 지정합니다.

참조
https://iamsang.com/blog/2012/08/19/introduction-to-java-bytecode/
https://en.wikipedia.org/wiki/Java_bytecode#Support_for_dynamic_languages/ 자바 바이트 코드
https://sjh836.tistory.com/64
https://c10106.tistory.com/3135
http://sjava.net/2008/02/javac-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EC%98%B5%EC%85%98-%EC%

profile
생각하는 개발자가 되자!

0개의 댓글