A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode.
자바 프로그램뿐만 아니라, 다른 언어로 쓰인 프로그램들도 자바 바이트코드로 변환하여 컴퓨터가 실행할 수 있게 하는 소프트웨어
컴파일러가 자바 코드를 컴파일하면 자바 바이트코드가 된다. 이 자바 바이트코드를 CPU가 이해하는 기계어로 번역해주는 것이 바로 JVM이다.
(자바 바이트코드란 자바 코드를 컴파일하면 나오는 .class파일이다.)
JVM의 이러한 역할은 Java와 OS사이에 중개를 담당하여 OS종속성에서 벗어나게 해준다.
인터프리터와 JIT 컴파일러를 혼합하여 명령어 단위로 해석한다.
캐싱 -
인터프리터 방식으로 실행하는 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경하고, 이후에는 해당 더 이상 인터프리팅 하지 않고 기계어로 직접 실행하는 방식
❗ 따라서 JIT는 메소드 호출 빈도에 따라 컴파일 여부를 결정한다.
JVM은 자바 코드를 해석할 때 인터프리터와 컴파일러 방식을 혼용하여 적용한다는 특징이 있다.
컴파일 언어와 비교
C언어는 각 운영체제에 맞게 따로 컴파일해야 한다.
하지만 자바는 C언어처럼 코드를 바로 기계어로 컴파일하지 않고 중간단계(바이트코드)에 머무르게 한다.
=> 그것을 JVM으로 해석함으로써 플랫폼 종속에서 벗어난다.
인터프리터 언어와 비교
인터프리터 언어는 한줄한줄 해석하기에 성능이 떨어질 수 있다.
=> 정적 컴파일러만큼 빠른 JIT와 혼용하며 인터프리터의 빠른 응답속도를 챙길 수 있음
각 플랫폼마다 JVM을 설치해야 한다.
그렇다면 JVM이 플랫폼에 종속적인 것 아닌가?
=> 오라클은 JVM을 손쉽게 설치할 수 있도록 지원하고 있다.
JVM이 프로그램을 수행하기 위해 OS로부터 별도로 할당받은 메모리 공간
모르는 용어가 상당히 많음(특히 JVM구조)
스레드, 가비지컬렉션에 대해서 긴밀히 알아보는 시간을 가지는 것이 좋겠음
또한 Java가 내부적으로 어떻게 실행되는지 알 수 있었고 타 언어와 어떤 차이가 있는지 파악함.
전체(플랫폼 종속, 정의, JIT 등) - https://coding-factory.tistory.com/827
JIT, JVM구조 - https://doozi0316.tistory.com/entry/1주차-JVM은-무엇이며-자바-코드는-어떻게-실행하는-것인가
JIT, 단점 - https://ko.wikipedia.org/wiki/JIT_컴파일
JVM구조 - https://ko.wikipedia.org/wiki/자바_가상_머신
JVM구조 - https://code-lab1.tistory.com/92
JVM구조, 자바 프로그램 실행과정 - https://jaehoney.tistory.com/173
글 잘읽었어요!! JVM이 인터프리터와 컴파일 방식을 혼용하여 사용한다 했는데 경우에 따라 다르게 사용하는 건지 적절한 장점만을 섞어 작동하는 것인지 궁금하네요!!
좋은 글 감사합니다.
실제 자바를 실행할 때 보이지 않는 부분이라 동작과정에 대해서 자세히 알지 못했는데, 구조 그림과 함께 하나하나 설명해주신 부분을 통해서 조금이나마 이해한 것 같습니다!
좋은 글 감사합니다!
자바가 인터프리터를 사용하면서 컴파일 언어라는 건 알고 있었지만, 왜 그런지, 어떤 메커니즘으로 동작하는 지에 대해서는 잘 모르고 있었는데 이번 글을 보고 자세히 이해할 수 있습니다.
글 잘 읽었습니다!
java의 파일 구조가 왜 .java와 .class가 붙는지 알 수 있었네요.
다만 메모리 부분에서 3-2-1 ~ 3-2-3은 객체 지향의 T메모리 구조를 검색해보시면 설명이 더 잘 들어오는 것 같아요!
또, 글의 목차가 많은데 구분이 H 크기로만 이루어져서 가독성이 약간 떨어질 수 있는 것 같아요!
구분 선이나, 색 구분 등이 추가되면 더 이쁘게 정리 될 것 같습니다..!
좋은 글 감사합니다 ㅎㅎ🙂