본문 바로가기

Java

(4)
JVM 내부 구조 (2) - 런타임 데이터 영역 JVM 메모리 영역 - Runtime Data Area 자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 여러 영역으로 나누어 관리함 JVM 메모리 영역 "Runtime Data Area"는 크게 세 가지 영역으로 구분할 수 있음 - 메소드 영역, 힙 영역, 스택 영역 메소드 영역과 힙 영역은 모든 스레드가 공유하는 영역 스택 영역과 기타 영역들은 스레드별로 생성되는 영역 메소드 영역 (static 영역) 클래스 로더에 의해 클래스가 로딩될 때 생성 클래스 로더가 읽어 들인 클래스에 대한 런타임 상수 풀, 필드 데이터, 메소드 데이터 등을 저장 모든 스레드가 공유하는 영역이기 때문에 공유 데이터의 경우 thread safe 해야 함 클래스 파일 구조 컴파일된 클래스 파일은 아래..
JVM 내부 구조 (1) - 클래스 로더 클래스 로더 자바 소스파일을 컴파일하면 바이트 코드로 이루어진 클래스 파일로 변환 자바 프로그램이 실행되면 클래스 로더는 클래스 파일을 JVM 내부 메모리에 로드함 메모리에 처음 로딩되는 클래스는 일반적으로 main() 메소드가 포함된 클래스 클래스 로더는 크게 세 단계로 처리됨 : 로딩(Loading), 링킹(Linking), 초기화(Initialization) 로딩 클래스 파일의 데이터를 생성하고, JVM 내부 메모리 영역에 로드 JVM은 ClassLoader.loadClass() 메소드를 통해서 클래스 파일을 메모리에 로드 클래스 파일은 기본 제공 클래스인지, 개발자 정의 클래스인지와 같은 기준에 의해 세 가지 수준으로 나뉨 부트스트랩 클래스 로더 (Bootstrap Class Loader) 루트 ..
Java 프로그램의 실행 과정 Java 프로그램의 실행 과정 소스 코드 작성 컴파일러(javac)는 자바 소스코드(.java)를 JVM이 해석할 수 있는 바이트 코드(.class)로 변환 JVM은 클래스 파일의 바이트 코드를 해석하여 바이너리 코드로 번역하고 연산을 처리 MyProgram.java public class MyProgram { public static void main(String[] args) { System.out.println("Hello World!"); } } MyProgram.class # 아래 컴파일 명령을 통해 MyProgram.class 파일이 생성된다. javac MyProgram.java # 32bit 기반의 헥사코드로 나타낸 바이트 코드 00 01 02 03 04 05 06 07 08 09 0A 0..
JVM, JDK, JRK JVM (Java Virtual Machine) 자바 프로그램을 실행하는 프로그램 자바 바이트 코드를 어떻게 실행할 지에 대한 표준을 특정 벤더가 구현한 구현체 클래스 파일에 작성된 자바 바이트 코드를 인터프리터 또는 JIT 컴파일러를 통해 OS에 특화된 코드로 변환하여 실행 자바 프로그램을 모든 플랫폼에서 제약 없이 동작 시킬 수 있음 JVM은 특정 플랫폼에 종속적임 모든 플랫폼에서 제약없이 동작한다고 했는데 플랫폼에 종속적이라는 말은 무엇일까? 자바 프로그램 자체는 플랫폼에 종속되지 않지만, JVM은 플랫폼에 맞게 설치해줘야 한다. 처음엔 조삼모사가 아닐까라고 생각했지만 다양한 환경에 코드를 배포해야 하는 상황에 개발자가 자신이 작성한 코드를 모든 환경에 맞춰 컴파일 해야한다면 상당히 번거로울 것이다..