Java 정리 #1 - JVM

ims·2021년 5월 23일

Java BASIC

목록 보기
1/1
post-thumbnail

📌 JVM

🔥 JVM이란

JVM이란 자바 byte 코드를 실행해주는 런타임 환경

🔥 동작방식

class코드를 JVM이 번역할 수 있는 byte코드로 만들고, 이 byte코드를 JVM이 인터프리터 방식으로 기계어로 번역하면서 실행

  • Member.java 작성

  • "javac.exe"를 통해 .java 컴파일

  • 컴파일이 된 Member.class 생성

이 때, .class 파일은 바이트 코드로 이루어져있다.
바이트 코드는 반 기계어 상태로, 컴퓨터가 읽을 수 없다. 추가적인 변환 과정이 필요하다.

  • Member.class 파일을 "java.exe"로 실행

  • "Class Loader"를 통해 "Member.class"를 JVM으로 가져온다.

  • JVM의 Byte Code Verifier에서 bytecode 검증

  • 인터프리터가 bytecode -> binarycode로 변환

변환된 binarycode는 JVM의 class영역에 저장

  • Runtime 실행

🔥 bytecode

Bytecode is program code that has been compiled from source code into low-level code designed for a software interpreter

바이트 코드란 특정 하드웨어가 아니라, 가상 환경에서 돌아가는 실행 프로그램을 위한 이진 표현법

📌JIT 컴파일러

JIT = Just In Time. 프로그램을 실제 실행하는 시점에 기계어로 번역하는 것

🔥 program 만드는 2가지 방식

  1. Interpret

실행 중 프로그래밍 언어를 읽어가면서 대응되는 코드를 기계어로 바꿈

  1. 정적 Compile

실행하기전 코드를 기계어로 모두 번역한 뒤 실행

  • JIT 컴파일러 = Interpret + 정적 Compile

실행시점에는 인터프리터 방식을 사용
인터프리트 된 코드를 Caching하여 중복된 코드가 지속해서 번역되는 것을 방지함

📌 Class Loader

  1. class Loader는 .class 파일을 컴파일 시점이 아닌, 실행 시점에 Runtime Data Areas에 Load한다.

이 말은, 클래스를 처음 참조하는 시점 ( 인스턴스를 생성하는 시점 )에 파일을 메모리에 올린다는 뜻

이때, 모든 Class는 참조되는 순간 "동적"으로 Load와 Link가 이루어진다.

📌 Runtime Data Areas

JVM이 운영체제 위에서 실행될 때, 운영체제에게 할당받는 메모리 영역

🔥 JDK & JRE

JDK = Java Developement Kit
= JRE + @

Java9 버전부터는 JRE가 JDK안에 포함돼서 사라졌다.

📌 글의 출처

이 블로그의 글은 아래 블로그의 글을 참조하였습니다.

https://www.notion.so/java-JVM-1238f12eccff4b67be263cd4a5b7dbbe

profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글