1주차 과제

Jin·2022년 5월 25일
0

1. JVM이란 무엇인가

  • Java Virtual machine 자바 가상 기계
  • 자바 프로그램은 완전한 기계어가 아닌 바이트 코드이기 때문에 이것을 해석 할 수 있는 가상의 운영체제가 필요
  • 운영 체제와 자바 프로그램을 중계하여 동일한 실행 결과가 나오도록 설계한 것
  • 기계어 : CPU가 읽고 실행할 수 있는 이진 코드
  • 어셈블리어 : 기계어보다는 한 단계 높은, 기계어를 사람이 알아보기 쉽게 가공한 언어
  • 고급어 : 개발자가 다루는 언어들. JAVA 등
  • 바이트코드 : 고급 언어를 변환하여 가상 머신이 이해할 수 있게 한 코드. 가상 머신은 바이트 코드를 기계어로 컴파일한다.

2. 컴파일 하는 방법

3. 실행하는 방법

  • 컴파일 : 프로그래밍 언어를 컴퓨터가 실행 가능한 기계어로 만드는 일
  • 컴파일러 : 파일 전체를 읽은 뒤, 코드의 의미를 해석하고 파일 전체를 어셈블리어로 변환 후 기계어로 변환한다.
  • 인터프리터 : 코드를 한 줄 한 줄 읽어내려가며 한 줄씩 기계어가 아닌 중간 단계의 바이트 코드로 변환한다. 바이트 코드를 한줄씩 해석.

4. 바이트 코드란?

  • JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드
  • 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1byte라서 자바 바이트 코드라고 불림
  • JVM만 설치되어 있다면 어떤 운영체제에서라도 동작 가능

5. JIT 컴파일러란? 동작 방법?

  • Just In Time
  • JIT 컴파일러는 런타임 시 JAVA 어플리케이션의 성능을 향상시키는 Java Runtime Environment의 구성요소
  • 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 네이티브 코드를 실행하기 때문에 전체적인 실행 속도는 인터프리팅 방식보다 빠름
  • 프로그램을 실행하는 시점에 기계어로 번역하는 컴파일 기법

6. JVM 구성 요소

1) Class Loader

  • 실행 시 필요한 클래스를 동적으로 메모리에 로드하는 역할을 한다.
    찾았을 경우 해당 클래스 파일을 읽엉서 class 객체로 변환.
    못찾았을 경우 ClassNotFoundException발생.

2) Execution Engine

  • 메모리에 로드된 클래스를 실행시키는 역할
  • 인터프리터, JIT 컴파일러로 자바 바이트 코드를 기계가 실행할 수 있는 형태로 변경

3) Runtime Data Area

  • 프로그램이 실행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 용도에 따라 여러 영역으로 나누어 관리

  • 1) Method area
    프로그램 실행 중 어떤 클래스가 사용되면 JVM은 해당 클래스의 클래스 파일을 읽고 분석하여 클래스 데이터를 이곳에 저장한다. 이 때 클래스 변수도 이 영역에 함께 생성된다.

  • 2) Heap
    인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉 인스턴스변수들이 생성되는 공간

  • 3) Call stack or Execution stack(호출스택)
    메서드 작업에 필요한 메모리 공간을 제공한다.

  • 4) Garbage Collector
    더 이상 참조하지 않는 힙 영역의 메모리를 정리

7. JDK와 JRE 차이

  • JRE : Java Runtime Environment 자바 실행환경
    프로그램 실행에 필요한 자바 가상기계, 라이브러리인 API만 포함
    JVM + 표준 클래스 라이브러리

  • JDK : Java Development Kit 자바 개발키트
    개발에 필요한 자바 가상기계, 라이브러리 API, 컴파일러 등의 개발도구가 포함
    JRE + 개발에 필요한

출처 : https://sosocodingday.tistory.com/2

0개의 댓글