✍JAVA STUDY 1주차

min·2021년 10월 13일
0

😎 자바 이론 공부가 필요할 것 같아 아래 라이브 스터디 일정을 참고하여 앞으로 15주간 공부해 보려고 한다. 화이팅!!🙂🙃🙂🙃
https://github.com/whiteship/live-study.git

✅JAVA STUDY -1주차

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

JVM

JAVA Virtial Machine의 약자로 Java Byte Code를 OS에 맞게 해석해주는 역할을 하는 가상머신

📌 Byte Code

특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진표현법

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

💡 컴파일하는 방법

요즘은 IntelliJ, Eclipse를 많이 활용하여 .java를 직접 컴파일 할 일이 없다.

OpenJDK 11 버전을 설치하고 환경변수를 설정했다고 가정하고 실습을 진행한다. (Windows 10 기준)

메모장으로 아래와 같이 기본적인 구조의 자바 클래스를 생성한다.

public class Compile {
  public static void main(String[] args) {
    System.out.println("Hello, JAVAC");
  }
}

해당 파일을 javac를 활용해서 컴파일하면 .class가 생긴다.

👉 Java Code 실행방법

➀ .java파일을 자바 컴파일러를 통해 Java Byte Code로 컴파일 한다.
➁ 컴파일된 바이트코드를 JVM의 클래스로더로 전달한다.
➂ 클래스 로더는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 JVM의 메모리 Runtime Data Areas에 올린다.
➃ Execution Engine(실행 엔진)에서 Byte code를 실행 가능하도록 해석한다.

👉 JVM(자바 가상 머신) 구성

1. 자바 인터프리터(interpreter)

  • 자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것

2. 클래스 로더(class loader)

  • 자바는 동적으로 클래스를 읽어와 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결된다. 여기서 동적으로 클래스를 로딩해주는 역할을 클래스 로더가 한다.

3. JIT 컴파일러(Just-In-Time compiler)

  • 자바 컴파일러가 생성한 자바 바이트 코드를 프로그램이 실행 중인 런타임에 바로 기계어로 변환하는 데 사용
  • 동적 번역(dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발

4. 가비지 컬렉터(garbage collector)

  • 자바 가상 머신은 가비지 컬렉터를 이용하여 사용하지 않는 메모리를 자동으로 회수한다.
  • 개발자가 메모리 관리하지 않아도 되어 더욱 손쉽게 프로그래밍을 할 수 있도록 도와준다.

💡 JIT 컴파일러 동작 방식

👉 JDK와 JRE의 차이

JDK (Java Development Kit)

  • Java를 사용하기 위해 필요한 기능을 갖춘 Java용 SDK(Software Development Kit)이다.
  • 자바 프로그램을 생성하고 컴파일 할 수 있다. JRE를 포함한다.

JRE (Java Runtime Environment)

  • 자바 가상 머신, 자바 클래스 라이브러리, 자바 명령 및 기타 인프라를 포함한 컴파일된 Java 프로그램을 실행하는데 필요한 패키지

    일반적으로 컴퓨터에서 Java 프로그램을 실행만 한다면 JRE만 설치하면 되나 Java 프로그래밍을 할 계획이라면 JDK를 설치하여야 한다.

🙇 참고 및 출처 👍

[JAVA] JVM 동작원리 및 기본개념
[Java-3] JVM과 JIT 컴파일러란?
자바 프로그래밍
.java를 JVM으로 실행하는 과정 이해하기
[JAVA]JDK,JRE차이점(JDK란? JRE란?)

0개의 댓글