자바는 어떻게 실행될까? complie과 JVM

bethe·2022년 7월 27일
0

Java

목록 보기
2/14

1. 프로그래밍 언어와 기계어

compile1

2진수로 되어 있는 언어처럼 컴퓨터가 이해하는 언어를 기계어 라고 부른다. 코드를 기계에 바로 적용시킬 수도 있지만, 기계어는 매우 어렵기 때문에 어려운 만큼 비효율적인 방식으로 작업하게 된다.

그래서 우리는 인간이 이해할 수 있는 프로그래밍 언어(고수준언어)로 코드를 짠 다음, 컴파일러Compiler를 이용해 프로그래밍 언어를 컴퓨터가 이해할 수 있는 저수준 언어 or 기계어로 바꿔준다.


2. complie과 OS

complie의 구체적인 과정은 이러하다.
complie2

  1. 프로그래밍 언어를 complie하면 complie된 Byte파일이 생성된다.
  2. Byte 파일은 OS가 받아서 실행한다.
  3. OS는 기계를 실행시킬 수 있다. (=기계를 실행시키는 것은 OS가 한다.)

그런데 OS 종류는 Window, MAC 등 다양하다. 문제는 OS에 따라 파일을 따로 만들어야 한다는 점이다. 이러한 언어 중 하나가 C언어이다.

3. JVM

이런 문제를 JVM이 해결했다.

1. Java가 실행되는 과정

😉 JVM(Java virtual machine)은 Byte파일을 해당 OS에 맞게 변환해준다.
JVM

2. Java는 하이브리드 언어

JVM이 파일을 OS에 맞게 변환할 때 과정을 살펴보자.

  1. JVM은 .class 파일(Byte code)을 로드한다. (클래스로드)
  2. 파일의 코드를 실행한다. (실행)

    이 때, 코드는 한 줄, 한 줄씩 실행되며 OS에 전달된다.
    이렇게 한 줄씩 낮은 수준의 언어로 번역하는 일을 인터프리트라고 한다.

    complie vs interpret
    컴파일러 : 전체 코드를 한 번에 번역, 실행 속도가 빠름, 오류 방지 용이
    인터프리터 : 한 줄씩 번역, 컴파일에 비해 속도가 느림

✍️ Java는 먼저 컴파일을 하고, 후에 JVM으로 인터프리터를 하기 때문에 하이브리드 언어라 불린다.



🌳→🌿 언어의 발전과 Java언어


이미지 출처

1. 어셈블리 언어(저수준 언어)

  • 어셈블리 언어는 사람이 이해하기 편한 명령어(add, minus 등)를 기계어로 번역해준다.
  • 어셈블리 언어에 명령을 내리는 명령어 셋을 갖추고 있는 프로세서는 CISC와 RISC이고, 이는 CPU에 포함되어 있다.

    CISC : 명령어가 많고 복잡함
    RISC : 명령어가 적고 효율적임, 모든 명령어를 사용하지 않는데 많은 명령어를 들고 있으면 비효율적이므로 개발됨

  • 따라서 어셈블리 언어는 CPU에 종속되고, CPU 종류마다 다 다른 어셈블리 언어가 있어야 했다.

장점 🙂 속도가 빠름
단점 🙁 CPU(하드웨어)에 종속됨

2. C언어(고수준 언어)

  • 어셈블리 언어를 극복하기 위해 등장, 맨 위에서 말한 '사람이 이해할 수 있는' 고수준 언어이다.
  • OS를 바탕으로 실행되는데, OS는 내가 어떤 CPU를 가지고 있는지 알기 때문에 CPU에 맞게 저수준 언어로 번역해준다.
  • 그러나 C언어 또한 OS가 있어야 작동한다는 점에서 OS에 종속적이다.
  • 또한 OS도 종류가 다양해서 (Window, MAC, Linux) C 언어 또한 OS별로 개발해야 한다.

장점 🙂 OS가 있으면 고수준언어로 코딩 가능
단점 🙁 어셈블리 언어보다는 나으나, OS에 종속됨

3. Java(하이브리드 언어)

  • Java는 JVM이 파일을 OS에 맞게 번역해준다. 따라서 어떤 OS에서 작업하든지 상관없다.
  • 이것을 인터프리트한다고 말하는데, 정확히는 .class파일을 shell 언어로 번역하는 것을 의미한다.

    shell언어 : OS와 상호작용하며 소통할 수 있는 언어. shell 언어는 명령 프롬프트에서 명령해준다.
    이렇게 상호작용하는 방식을 CLI라고 부르며 사용자가 아이콘 등의 그래픽으로 알기 쉽게 나타낸 것을 GUI라고 한다.

    이미지 출처

장점 🙂 어떤 OS에서도 코딩 가능
단점 🙁 VTM에 종속적이라는 한계가 있음

profile
코딩을 배우고 기록합니다. 읽는 사람이 이해하기 쉽게 쓰려고 합니다.

0개의 댓글