JVM (Java Virtual Machine)

종명·2021년 4월 13일
0

목표

자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

목차

  1. JVM이란 무엇인가
  2. 컴파일 하는 방법
  3. 실행하는 방법
  4. 바이트코드란 무엇인가
  5. JIT 컴파일러란 무엇이며 어떻게 동작하는지
  6. JVM 구성 요소
  7. JDK와 JRE의 차이

1. JVM 이란 무엇인가?

  • 자바 프로그램을 실행할 수 있는 가상 머신을 말한다.
  • WORA (Write Once, Run Anywhere) : 자바 릴리즈 이전에는 Window, Linux, Mac 등 특정 운영체제에 맞추어 프로그래밍 해야하는 불편함이 있었다. JVM은 어느 운영체제이던지 상관없이 자바 프로그램을 실행할 수 있도록 해준다.

출처 : https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html

2. 컴파일 하는 방법은?

  • 자바 JDK를 설치한 경로안에 bin을 보면 javac라는 이름의 컴파일러를 볼수있다.
  • C:\Program Files\Java\jdk-11\bin (내 pc 경로)

에디터로 다음과 같이 간단한 자바소스 코드를 작성하였다.

javac Hello.java

터미널에서 Hello.java가 위치가 경로로 이동 뒤 다음과 같이 입력해주면 컴파일이 된다.

단, jdk bin 경로를 환경변수에 등록해 주어야 바로 javac 명령어를 사용할 수 있다.

컴파일이 완료되면 Hello.class라는 파일이 생성된걸 확인할 수 있다.

3. 실행하는 방법은?

java Hello

다음과 같이 실행되는 걸 볼수있다.

4. 바이트 코드란 무엇인가?

  • 바이트코드는 JVM이 실행할 수 있는 2진코드를 말한다.
  • 위에서 Hello.java파일을 컴파일하면 Hello.class라는 파일이 생성되는걸 보았다. 이 파일이 바이트코드로 작성된 class파일이다.
  • 이 바이트코드 파일은 어느 OS든지 상관없이 각 OS에 맞는 JVM만 설치되어 있으면 실행 가능하다.

5. JIT 컴파일러란 무엇이며 어떻게 동작하는지?

  • JIT컴파일러는 자바 바이트코드를 런타임에 바로 기계어로 변환하는 컴파일러를 말한다.
  • JIT컴파일러는 런타임시 바이트코드를 네이티브 기계어로 한번에 컴파일 한 후 사용한다.
  • 컴파일 후 캐싱하고 이후에 변경된 부분만 컴파일하고 나머지는 캐시에서 가져다 바로 실행한다.
  • 이러한 특징때문에 Interpreter방식에 비해서 빠르다.

6. JVM 구성요소


출처 : https://www.geeksforgeeks.org/jvm-works-jvm-architecture/

  • Class Loader : *.class 파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역에 적재하는 역할을 한다.
  • JVM Memory
    • Method Area : 모든 클래스정보와 static 변수가 담긴다.
    • Heap : new 키워드로 생성된 객체, 배열이 저장되는 영역이며 gc의 대상이 된다.
    • Stack : 지역변수, 파라미터 등 연산에 사용되는 임시값이 저장되는 영역이다. 메소드를 호출할때 개별 스택이 생성된다.
    • PC Registers : 쓰레드가 생성될 때마다 생성되는 영역이다. 각 스레드의 PC를 저장한다.
    • Native method Stacks : 자바가 아닌 다른 언어로 작성된 네이티브 메서드를 지원하기 위해 사용되는 스택

7. JDK와 JRE의 차이는?

  • JDK : 자바 개발 도구로써 JDK를 설치하면 JRE도 함께 설치된다.
  • JRE : 자바 실행 환경으로써 자바 언어로 작성된 프로그램을 실행하기 위해 필요하다.

참고

0개의 댓글

관련 채용 정보