JVM(1)

김재익·2023년 5월 18일
0

JAVA

목록 보기
1/18
post-thumbnail

JDK, JRE, JVM

JDK : Java Development Kit / 자바 개발 도구

JRE : Java Runtime Environment / 자바 실행 환경

JVM : Java Virtual Machine / 자바 가상 기계

Java의 호환성

Java는 Write Once Use Anywhere (소스파일 하나면 어디든 사용 가능) 이라는 목적을 가지고 있다.

즉 우리는 Java를 사용하여 기계의 기종별 즉, 운영체제에 구애받지 않고 개발을 할 수 있다.

여기서 Java의 목적파일은 반기계어인 바이트코드(.class)인데 이는 운영체제가 아니라 JVM에서 사용된다

소스코드를 바이트 코드로 컴파일 해주는게 자바 컴파일러(javac)이다. *사진참고

Java의 실행 과정

  1. 개발자는 자바 소스파일(.java)를 작성
  2. JDK가 제공하는 javac를 사용하여 소스파일을 컴파일
  3. JVM의 Class Loader는 컴파일로 생성된 바이트 코드(.class)를 전달 받아 동적 로딩을 통해 실행에 필요한 클래스들을 로딩하여 JVM 내부 Runtime Data Area에 로드
  4. JVM의 Execution에 의해 기계어로 해석되어 실행

Class Loader

  • JVM 내부에 바이트 코드를 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈이다.
  • 프로그램 상의 작성한 모든 클래스, 변수 및 메서드의 정보를 Method Area에 배치한다.
  • 실행될 때 동적으로 클래스를 로드하고 jar 파일 내부에 저장되어 있는 클래스들을 JVM에 로드한다.
  • static(정적) 변수와 메서드는 Heap Area에 배치한다.

Execution(실행 엔진)

  • Interpreter는 바이트 코드를 한줄 씩 읽고 번역해 주는데 느리다는 단점이 있다.
  • 이를 보완하기 위해 나온 것이 JIT 컴파일러
  • JIT 컴파일러는 Interpreter 방식으로 실행을 하다가 적당한 시점에 바이트 코드 전체를 컴파일하여 캐싱한다.
  • 컴파일된 코드를 저장해 두기 때문에 이 코드들은 Interpreter를 통해 실행되는 것이 아니라 바로 실행이 된다 그렇기 때문에 실행 속도가 매우 빨라진다.
  • Garbage Collector는 간단하게 설명 하자면 유효하지 않은 즉, 사용되지 않는 메모리를 추적하여 비워주는 기능을 한다.

Compile 언어와 Interpreter 언어

Compile 언어 (C, C++, Java, C# ...)

  • 소스파일 전체를 컴파일 한 후 기계어를 CPU와 메모리를 통해 읽어서 바로 실행하는 방식으로 동작이 되는 언어
  • 소스파일의 크기가 크면 컴파일 과정이 오래 걸릴 수 있다.
  • 컴파일이 된 후에 기계어로 바로 실행되기 때문에 실행 속도가 빠르다.
  • Java는 javac에 의해 바이트코드로 컴파일 되지만 JVM에서는 인터프리터로 실행된다.
    그러므로 Compile 언어이지만, Interpreter 언어의 특징을 동시에 가진다

Interpreter 언어 (Javascript, Ruby, Python ...)

  • 소스파일을 컴파일하지 않고서 Interpreter를 사용하여 소스파일을 한줄 씩 번역하면서 실행하는 방식으로 동작이 되는 언어 Interpreter : 소스 코드를 바로 번역하여 실행하는 프로그램 혹은 환경
  • 컴파일 언어처럼 별도의 목적파일이 존재하지 않는다.
  • 컴파일 과정 없이 바로 실행되기 때문에 수정 및 디버깅시 편하다.
  • Interpreter 만 존재하면 어디서든지 실행이 가능하기 때문에 자유롭고 독립적이다.
  • 실시간으로 번역 되면서 실행되기 때문에 실행 속도가 느리다.
profile
개발자호소인

0개의 댓글