JAVA 의 특징 -3(JVM)

devJune·2023년 4월 14일
0

개발 상식

목록 보기
3/7

JVM(Java Virtual Machine)

직역하면 "자바를 실행하기 위한 가상 기계"라고 할 수 있다.

Java는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java를 실행 시킬 무언가가 필요하다. 그게 바로 "JVM" 이다
https://blog.kakaocdn.net/dn/0kg24/btq4YOOQH4J/EF2ISOpkYA36a1flwtLEmK/img.png

컴파일 과정

Java 소스 코드 , 즉 원시코드(*.java) 는 CPU가 인식을 하지 못하는 기계어로 컴파일을 해줘야한다.
하지만 java는 JVM 이라는 훌륭한 머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환한다.

Java compiler가 .java 파일을 .class 라는 java bytecode로 변환 시켜준다.

Java compiler는 JDK를 설치하면 bin에 존재하는 javac.exe를 말함, (JDK에 java 컴파일러가 포함됐다는 뜻임)
javac 명령어를 통해 .java.class로 컴파일 가능.

변환된 bytecode는 기계어가 아니릭 때문에 OS에서는 바로 실행되지않아.

이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 Byte Code는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다.

OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다.

컴파일 하는 방법

아래는 Java Compiler에 의해 .java 파일을 .class 라는 Java bytecode로 만드는 과정이다.

Java Compiler는 JDK를 설치하면 javac.exe라는 실행 파일 형태로 설치된다. 정확히는 JDK 의 bin 폴더에 javac.exe 로 존재한다.

Java Complier 의 javac 라는 명령어를 사용하면 .class 파일을 생성할 수 있다.

역시 원시인인 나에게 코드가 빠져서는 안된다.

copy typescriptpublic class test {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

"Hello World"를 출력하는 .java 파일을 생성하고 이를 .class 파일로 변환시켜보자.

copy bashC:\Users\owner>cd Desktop

Windows를 기준으로, cmd 창을 열고 해당 .java 파일이 있는 곳으로 이동한다.

copy makefileC:\Users\owner\Desktop>javac test.java

해당 위치에서 javac 명령어로 컴파일을 진행한다.

위와 같은 순서를 진행하면
https://blog.kakaocdn.net/dn/qC6Bo/btq4YrM8hVQ/GzVJrciE80KPMaVAkJjXLK/img.png
위와 같은 test.class를 얻을 수 있다.





바이트코드란 무엇인가 ?

간단하게 JVM에서 돌아가는 실행 프로그램을 위한 이진 표현법임ㅇㅇ
자바 바이트 코드는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미해
자바 컴파일러에 의해 변환된 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있어.

JVM의 구성요소

https://blog.kakaocdn.net/dn/tclVx/btq4Xfml6Dy/nzb5xxlGG1fr5iBGUMv77K/img.png

  • 클래스 로더
  • 실행 엔진
    1. 인터프리터
    2. JIT 컴파일러
    3. 가비지 콜렉터
  • 런타임 데이터 영역

참고 티스토리
참고 블로그

profile
지식 저장소

0개의 댓글