[#1] JAVA STUDY

곽동현·2022년 11월 30일
0

백기선님의 자바 스터디 1주차 내역을 토대로 학습 및 작성합니다.

JVM이란 무엇인가?

자바 가상 머신(Java Virtual Machine)
자바는 JVM이라는 가상 환경을 띄워 그 위에서 동작한다. OS에 상관 없이 동작이 가능하다는 특징은 무슨 의미일까,
JVM은 자바 언어를 특정 OS들에 맞게 변경을 해주고 자바로 작성된 프로그램은 이 JVM에서만 실행이 가능하다.

추가 내용은 내 JVM 기록 다시 참조하기

특정 OS에 맞게 변경은 어떻게 이뤄지고 JVM에서 어떻게 실행될까?


JVM 구성 요소

  • 클래스 로더 (Class Loader)
  • 실행 엔진 (Execution Engine)
  • 런타임 메모리 (Runtime Data Area)
  • 가비지 콜렉션 (GC, Garbage Collection)

각 구성 요소 특징 -> 참조


컴파일 하는 방법

컴파일(Compile)?

어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 또한 이 과정을 자동으로 수행해주는 소프트웨어를 컴파일러(Compiler)라 한다.

  1. 개발자, 코더는 Java 언어로 소스 코드를 작성한다.

  2. Java의 모든 소스 코드는 먼저 .java 확장자로 끝나는 일반 텍스트 파일로 작성된다.

  3. 이후 이러한 파일은 javac 컴파일러 에 의해 .class 파일로 컴파일된다.

컴파일 과정

  • 어휘 분석
  • 구문 분석
  • 의미 분석
  • 중간코드 생성 -> 중간코드 최적화

위 과정을 거쳐 컴파일이 진행된다. 여기서 중간코드란
바이트 코드(Byte Code)라 칭한다.


바이트코드란?

javac 컴파일러는 일반 텍스트 파일을 .class 파일로 컴파일 해준다고 했다. .class 파일을 구성하는 데이터가 바로 바이트코드이다.

공식 오라클 레퍼런스을 찾아보면
".class 파일에는 고유 프로세서 코드가 포함되어있지 않다.
그 대신 JVM의 기계어인 바이트 코드를 포함한다."

라고 기술되어 있다.

바이트 코드란 JVM이 이해할 수 있도록 하는 기계어로 변환된 것을 의미한다.

여기서 기계어는 하드웨어 아키텍처 상에 기계어와 다르다.

Java Bytecode는 우리가 개발하는 자바 프로그램(코드)를 배포하는 가장 작은 단위라 생각 할 수 있다.


JIT 컴파일러란?

자바라는 언어는 특징 중 컴파일 과정, 인터프리터 방식을 모두 거친다.
깊게 들어가자면 바이트코드로 컴파일하고 바이트코드를 인터프리터하는 방식으로 실행된다.
인터프리터 과정은 소스코드를 런타임 시에 한 번에 한 줄씩만 읽어들이기 때문에 속도가 느린 점이 있다.
이 부분을 개선하기 위해 도입된 것이 JIT 컴파일러로 볼 수 있다.

JIT 컴파일러는 처음으로 읽은 바이트코드를 컴파일한 후
저장소에 저장(캐싱) 하여 번역 중복을 방지하는 역할을 한다.

바이트코드를 읽어들일 때, 이전 바이트코드와 비교하여 다른 코드면
새롭게 컴파일하고 중복 코드일 경우 캐싱된 코드를 사용하는 방식인 것이다. 이 특징으로
자바 인터프리터는 중복, 혹은 반복되는 바이트코드는 JIT 컴파일러가 모두 컴파일하기 때문에 컴파일 과정을 보조받는 셈이다. (속도 효율 증가)


실행하는 방법

  1. ex) Hello.java 라는 소스 파일을 작성했다.

  2. Hello.java를 컴파일한다.

    • cmd 창에 javac Hello.java 입력
  3. 이후 Hello.javajavac 컴파일러에 의해 컴파일되어 바이트 코드로 이루어진 Hello.class로 컴파일된다.

  4. 이를 실행하기 위해 JVM은 바이트 코드 파일(Hello.class)를 메모리에 로드하고 최적의 기계어로 변환하여 main() 메소드를 찾아 실행시킨다.

    • cmd 창에 java Hello 입력

JDK와 JRE의 차이

JDKJREJVM
JDK는 개발자 키트로, 개발에 필요한 어플리케이션 소프트웨어이다.JRE는 자바 클래스와 라이브러리, 필수적인 컴포넌트들을 제공한다.JVM은 바이트코드를 실행하고, 실행에 필요한 환경을 제공한다.

JDK는 JRE를 포함하고 있고, JRE는 JVM을 포함한다.
자바 개발이 목적이라면 JDK가 반드시 필요하다. 단순히 자바 파일을 실행시키는 목적이라면 JRE만 있어도 실행이 가능하다.
JVM은 JDK와 JRE와 달리 OS에 종속적이다. 그렇기 때문에 OS마다 맞는 기계어로 실행되어야 한다.

profile
읽고 쓰며 생각합니다 💡

0개의 댓글