자바 기본기 정리 6 - JVM (1)

유승선 ·2024년 1월 13일
0

자바 독학

목록 보기
7/10

이번 포스팅은 왜 JVM이 필요한지에 대해 적을 예정이고 바이트 클래스가 무엇인지, 그리고 실행 과정은 어떤지에 대해 내용을 정리할 것이다.

많은 내용은 다음 블로그에서 보고 참고했다. 참고 블로그


JVM이 필요한 이유

JVM이 필요한 이유를 알기 위해서는 Java의 특징을 아는것도 중요하다. Java는 OS에 종속되지 않는 특징 이 있다. OS에 종속이 안되고 Java를 실행 시킬 수 있는 원리가 바로 JVM (Java를 실행할 수 있게 하는 가상 컴퓨터) 다.

OS에 종속 되지 않는다는 것이 어떤 의미인지 알아보자.

컴파일 언어

컴파일 언어란, 언어에 내장되어 있는 컴파일러가 각 기계가 이해하는 기계어로 변환 해주어서 실행 프로그램을 만들어 준다. 우리가 화면에서 보는 소스 코드는 사람이 이해하기 쉽게 만들어진 언어고, 실제로 코드가 실행 되려면 컴퓨터가 이해할 수 있는 기계어로 변환되는 것이 우선이다.

이렇게 컴파일된 코드를 Binary Code (기계가 읽을 수 있는 이진 코드, 기계어) 라고 부른다.

컴파일러가 만들어준 기계어에는 단점이 하나 있느데.. 특정 OS나 CPU 구조에 맞춰진 컴파일러에 의해 다르게 컴파일 되는 특징이 있다.

한마디로, 컴파일러가 변환해주는 기계어는 각 OS마다 다르게 해석된다.

이것은 각 OS 환경에 맞춰진 독자적인 컴파일러이기 때문이다. 그래서 C 언어의 경우, 윈도우용 C프로그램, 리눅스용 C프로그램 등 OS환경에 종속되었다고 한다.

Java의 등장

컴파일러는 운영체제에 종속적이고, 이 문제를 해결할 수 있게 JAVA (JVM) 이 등장하게 되었다.
JAVA언어로 작성된 소스코드의 경우, 직접 운영체제에서 실행되는 것이 아닌, JVM을 거쳐서 상호작용을 하게 된다.

한마디로, JVM만 있으면, 아까 예시로 말한 C언어와 반대로 OS에 종속된 것이 아닌, 운영체제로부터 독립적으로 프로그램 제약없이 실행할 수 있다

이것이 가능한 이뉴는 컴파일된 코드와, 하드웨어/OS 사이 중간에서, 해당 하드웨어/OS 환경에 맞게 JVM 이 Byte Code 로 변환해주기 때문이다.

결국, JVM 이 설치 되었다는 가정 하에, 같은 자바 프로그램은 어떤 운영체제에서도 같이 활용될 수 있다.

정리해보면, 아까 예시로 설명한 C언어의 경우, 컴파일 과정은
소스 코드 -> Binary Code (기계어) 변환 후 하드웨어에 읽어짐, OS 환경에 따라 코드가 달라져야함.

Java의 경우,

  1. Java Compiler 가 Java 로 작성된 소스 코드 .java 파일을 .class 파일인 Byte Code 로 컴파일한다. (해당 코드는 직접 CPU에서 동작할 수 있는 코드가 아니다. JVM이 이해할 수 있는 코드다)
  2. 컴파일된 Byte Code를 기계어로 변환시키기 위해 가상 CPU가 필요한데, 이것이 JVM (Java Virtual Machine) 의 역할이다.
  3. JVM이 Byte Code를 기계어 (Binary Code) 로 변환한다.
  4. 이렇게 JVM에 의해 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 준다.

Java 언어는 OS에 종속된 환경이 아님으로, 이식성 이 높은 특성을 갖게 되었다.

JAVA 프로그램의 실행 과정

앞서 설명 했던 것처럼, JVM은 특성상 파일을 실행하기 위해서는 두번의 단계를 거쳐야 한다.

하나는 .java 파일을 .class 파일로 바꿔주는 컴파일 단계이고, 두번째는 .class 파일을 바이너리 코드로 변환하고 실행하는 단계이다.

  1. 소스코드 MyProgram.java 작성한다
  2. 컴파일러는 자바 소스코드를 인식해서 클래스 파일인 MyProgram.class를 생성한다. 컴파일된 클래스 파일ㄹ은 JVM이 인식할 수 있는 바이트 코드 파일이다.
  3. JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 변환하고 프로그램을 수행한다.
  4. MyProgram 수행 결과가 컴퓨터에 반영된다.

다음 편에서는 JVM 의 메모리 구조에 대해 더 상세하게 적어보겠다.

profile
성장하는 사람

0개의 댓글