1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

2021. 1. 23. 21:18[WhiteShip]Java

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

JVM이란 무엇인가


->JVM이란 java virtual machine의 줄임말이다.jvm은 java와 os사이에서 중개자 역할을 하며,java byte code를 os에 맞게 해석해 주는 역할을 하여 java가 os에 상관없이 사용가능하게 만들어준다. 

java는 jvm의 해석을 거치기 때문에 c와 같은 네이티브 언어에 비해 속도가 느렸지만 JIT(just in time)컴파일러를 통해 이러한 단점을 극복하였습니다.

https://asfirstalways.tistory.com/158

java byte code란?

->자바 소스 파일을 javac 명령어로 컴파일한 파일을 말합니다.

JVM 구성 요소


https://sjh836.tistory.com/64

->이렇게 4가지 요소로 구성된다.

 

1.Class Loder

->Runtime 시점에 클래스를 로딩하게 해주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모리에 로드하게 됩니다.

 

2.Garbage Collector

->Garbage Collector는 더이상 참조되지 않는 메모리를 정리해준다. Garbage Collector가 언제 호출되는지는 알 수 없으며, 사용자가 호출하더라도 메모리를 정리할 필요가 없다고 판단되면 실행되지 않는다.

 

3.Execution Engine

->클래스 로더를 통해 Runtime Data Area에 배치된 바이트코드는 Execution Engine에 의해 실행됩니다.

 

4.Runtime Data Area

->클래스 영역,가비지 컬렉션 힙 영역, 런테임 스택 영역, 네이티브 메소드 스택 영역 이렇게 4가지로 구분할 수 있다.

    a)클래스 영역

    ->실행에 필요한 클래스들을 로드하여 저장한다. 내부에서는 메소드 영역과 상수 영역으로 나뉘어 저장된다.

    b)가비지 컬렉션 힙 영역

    ->Garbage Collection에 의해  관리되는 영역이다. 동적 메모리 할당 영역이라고 하며, new 연산자로 객체를 만들 때 할당되는 영역이다

    c)런타임 스택 영역

    ->프로그램 실행 중 발생하는 메소드 호출과 복귀에 대한 정보를 저장한다.

    d)네이티브 메소드 영역

    ->자바에서 JNI(java native interface) 기술로 네이티브 메소드들이 바이트 코드로 변환되면서 사용되고 기록하는 영역이다.

컴파일하는 방법,실행하는 방법


사진과 같이 코드를 작성합니다.

컴파일을 하기 위해 javac라는 명령어를 입력한 후에 ls를 통해 현재 위치에 생성된 파일을 확인합니다.

다음과 같이 test.class가 생성된 것을 알 수 있습니다.

class 파일은 java test를 통해 실행시킬 수 있으며 Hello java가 정상적으로 출력된 것을 볼 수 있습니다.

여기서 주의할 점은 java test.class라고 실행하면 오류가 발생합니다.

JIt 컴파일러란 무엇이며 어떻게 동작하는지


JIT 컴파일러는 바이트코드를 기계어로 번역하여 실행하는 것을 뜻한다.et

interpreter방식은 바이트코드를 한 줄씩 읽으면서 코드를 실행하기에 동일한 메소드를 실행하는 경우 중복해서 번역하는 비효율이 발생합니다.

JIT 컴파일러는 코드를 캐싱해 두었다가 동일한 메소드를 실행할 경우 다시 interpreter하지 않고 캐싱된 내용을 실행합니다.

https://aboullaite.me/understanding-jit-compiler-just-in-time-compiler/

JDK와 JRE의 차이


JDK: Java Development Kit -> 자바 개발 도구

JRE: Java Runtime Environment -> 자바 실행 환경

https://www.guru99.com/difference-between-jdk-jre-jvm.html

'[WhiteShip]Java' 카테고리의 다른 글

9주차 과제:예외 처리  (0) 2021.01.18
8주차 과제: 인터페이스  (0) 2021.01.08