github.com/whiteship/live-study/issues/1
1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. · Issue #1 · whiteship/live-study
목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JV
github.com
백기선님이 진행하시는 자바 라이브 스터디 1주차.
1. JVM이란 무엇인가
Java Virtual Machine, 자바 바이트 코드를 실행할 수 있는 가상 머신이다.
JVM의 가장 핵심은 플랫폼에 독립적이라는 것. 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 어떤 기기, 어떤 하드웨어, 어떤 플랫폼 위에서도 동일하게 동작할 것이라는것을 보장한다.
JVM의 특성
스택 기반 가상 머신
- 단일 상속 형태의 객체 지향 프로그램이을 가상 머신 수준에서 구현( 자바는 단일 상속만을 허용 단, 인터페이스로 다중 상속처럼 할 수 있음 )
- 포인터를 지원하지만 주소값을 임의로 지정하진 못함
- 가비지 컬렉션
- 플랫폼 독립성 보장
- etc..
2,3 . 컴파일과 실행하는 방법
class hello{
public static void main(String[] args) {
System.out.println("first study");
}
}
hello.java의 코드 이다.
이 파일의 디렉토리에 가서 다음 명령어를 입력해 .class 파일로 컴파일한다.
javac hello.java
그리고 Byte Code로 변환된 hello.class를 JVM에 실행할 수 있도록 다음 명령어 실행
java hello
결과
4. 그렇다면 바이트 코드는 무엇인가?
.java로 작성된 코드를 JVM이 실행할 수 있는 바이트 코드로 컴파일한다.
바이트 코드는 C언어의 관점에서 어셈블리어와 동일선상으로 볼 수 있다.
컴파일된 바이트 코드의 명령어는 기본적으로 1바이트지만, 파라미터에 의해 길이가 길어질 수 있다.
5. JIT Compiler란 무엇이며 어떻게 작동하는가?
바이트 코드는 완전한 기계어가 아니다. 이 바이트 코드를 기계어로 번역하는 역할을 하는것이 JIT Compiler이다.
JIT Compiler는 코드가 실행되는 과정에서 실시간으로 기계어를 번역한다. (Just-In-Time, JIT)
기계어를 번역하는 과정에서 캐시를 사용해 변환된 코드를 재사용시 컴파일을 하지 않고 번역해 실행시간을 단축시킨다.
6. JVM 구성요소
위에 설명된 JIT Compiler를 포함해 크게 Class Loader, Execute Engine, Interpreter, JIT compiler, Garbage Collector로 구성된다.
상세 과정들은 너무나 잘 설명된 링크로 대체한다.
#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가?
#JVM이란? JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신이란 프로그램의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JV
asfirstalways.tistory.com
7. JDK와 JRE의 차이
JRE (Java Runtime Environment) - JVM과 JVM이 프로그램을 동작시킬 때 필요한 라이브러리와 파일들을 가진 환경
JDK (Java Development Kit) - JRE와 개발을 위해 필요한 javac, java를 포함한 java 개발 킷
8. 마무리
스프링을 이용해 프로젝트를 시작하려는데 문득, Spring에 대해 잘 이해하고 있는가? 라는 의문이 들었다. 그러다보니 나는 Java에 대해서는 잘 알고있는가에 대한 의문이 들기 시작했고, Java부터 시작해 Spring에 대한 기본적인 개념들을 정리하고자 했다.
그러던 중 백기선님이 진행하시는 Java 라이브 스터디를 알게 되었고, 첫주차부터 개념정리를 시작하기로 한다.
이런 후배 개발자들을 위한 컨텐츠를 진행해주시는 백기선님께 감사의 인사를..
Reference
ko.wikipedia.org/wiki/자바_가상_머신
ko.wikipedia.org/wiki/자바_바이트코드
'Java' 카테고리의 다른 글
[Java] 상속 (0) | 2021.02.21 |
---|---|
[Java] 클래스 (0) | 2021.01.04 |
[Java] 제어문, Queue, Stack, LinkedList (0) | 2020.12.23 |
[Java] 연산자 (0) | 2020.12.20 |
[Java] 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.12.19 |