JVM

매니·2022년 8월 29일
0

오늘 스레드와 프로세스 그리고 멀티스레드 멀티프로세스에 대해서 알아보다 JVM 이라는 단어를 발견해서 포스팅해보려고한다

JVM 정말 익숙하다. 진짜 많이 들어보았고 자바 버추얼 머신이라는것은 Java를 한번쯤 공부해본 사람들은 다 알것이다.

그래서 자바 버추얼 머신이라는건 알겠어 그래서 JVM이 어떤 일을 하는데?
(모르는건 죄가 아니다. 지금 알아가고있잖아? ^^...ㅎ....ㅎ...)

Java 특징

Java의 특성중 하나를 설명해보자면

  • OS에 종속되지 않는다.

OS는 Mac, Window, Linux 대표적으로 3가지가 있고 그 외에도 여러가지 OS가 있다. (운영체제 라고도 한다.)

이러한 OS에 종속되지 않는다는 뜻이다.

그렇다면, OS에 종속되지 않는다면 자바는 어떻게 실행하게 될까?

그게 바로 JVM 이라고 한다.

즉, Java를 실행시켜주는 가상의 버추얼 머신이라고 생각하면 된다.

컴파일 과정


java 파일이 컴파일러의 이해서 class 파일로 바뀌고 JVM 을 통해 OS에 도달하게 된다.

하지만 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.
출처


원래 알고자 했던 JVM에 대해서는 학습 했지만, 더 세부적인 내용이 있는 것 같아서 추가해보려 한다.


💡바이트 코드란 ?

바이트코드(Bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다.
자바 컴파일러로인해 변환된 명령어가 1바이트라서 바이트 코드라고 불린다.

바이트 코드는 다시 실시간 번역기 또는 JIT 컴파일러에 의해 바이너리 코드로 변환된다.

그렇다면 여기서 JIT 컴파일러는 또 무엇일까?

바이너리 코드는 컴퓨터가 이해할수있는 언어이다. 즉, 0과 1로 이루어진 언어이다.

즉, CPU가 이해하는 언어는 바이너리 코드, 가상 머신이 이해하는 코드는 바이트 코드이다.

JIT 컴파일러는 ?

인터프리터 방식의 단점을 보완하기 위해 도입되었고,
인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경하고, 이후에는 해당 더 이상 인터프리팅 하지 않고 기계어로 직접 실행하는 방식이다. (인터프리팅이 뭔데..? 추후 포스팅하고 링크를 달아둘 것이다.)

  • JIT 컴파일러는 바이트코드를 컴퓨터 프로세서(CPU)로 직접 보낼 수 있는 명령어로 바꾸는 프로그램이다.
  • JIT 컴파일(just-in-time compliation) 또는 동적 번역(dynamic translation) 이라고 한다.
  • JIT 컴파일러는 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일러이다.
  • 다른 컴파일러 유형과는 달리, JIT 컴파일러의 주요 정의 특성은 프로그램이 시작되고 코드를 컴파일한 후에 JIT 컴파일러를 실행한다는 것이다.

이것을 말하는 일반적인 방법은 JIT 컴파일러는 즉시 또는 다시 말해서 시간에 맞추어 코드를 컴파일한다는 것이다.

JVM 구성요소


출처


우선 간단히 JVM에 대해서 알아보았고 더 자세한건 내일 봐야겠다!

profile
성장중 🔥

0개의 댓글