본문 바로가기

Java/basic8

JVM 이란? JVM은 자바 가상머신이다.. JRE는 Java api와 JVM으로 구성되어 있고, 여기서 JVM은 자바 애플리케이션을 Class loader를 통해 읽어 자바 API와 함께 실행한다. 자바 바이트코드(.class 파일)를 각 OS별로 특화된 코드로 변환(인터프리터, JIT 컴파일러에서 수행함)하여 네이티브OS에 맞게 머신코드로 변환한 뒤 실행한다. 따라서 JVM은 특정 플랫폼에 종속적이라 할 수 있다. (각 OS별로 다른 JVM 버전이 존재함) 간략한 자바코드 실행순서: 자바코드 → 자바 컴파일러 → 바이트코드 → 인터프리터 or JIT컴파일러 → 바이너리코드 기술적인 정의로서의 JVM은 자바 코드를 실행하고 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램에 대한 사양이다. (다양한 버전의.. 2022. 10. 30.
String constant pool를 이해하면 왜 String이 불변으로 설계됬는지 이해할 수 있다 일단 method area(또는 클래스영역)의 runtime constant pool과는 별개의 영역이다. 구분해서 이해해야 함 runtime constant pool: 클래스 내의 final 제어자가 붙어있는 모든 상수들에 대한 symbol table을 관리(레퍼런스를 저장). 클래스 영역에 저장됨 String constant pool: 리터럴로 초기화된 String 변수값을 저장함. 힙 영역 내에 있는 String constant pool에 저장됨 자바에서는 String을 어떻게 생성하느냐에 따라 리터럴값의 저장위치 차이가 생긴다. new로 생성하면 Heap 영역에 저장된다. String pool에 존재하든 다른 같은 값의 객체가 있던 별개의 주소를 가진 객체 String 리터럴로 생성하면 해당 값은.. 2022. 4. 13.
JVM 아키텍쳐 구성요소 JVM에 대한 정의는 해당 포스트를 참고해주세요. JVM이 동작하는 순서는 다음과 같다. (구성요소 - class loader, runtime data area, execute engine, JNI...) 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당한다. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일한다. Class Loader를 통해 JVM Runtime Data Area로 로딩한다. Runtime Data Area에 로딩 된 .class들은 Execution Engine의 인터프리터와 JIT 컴파일러를 통해 해석합니다. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution En.. 2022. 4. 7.
JDK, JRE의 차이 JRE(java runtime environment) = JVM + JAVA API 배포판의 목적은 자바 어플리케이션을 '실행'하는데 필요한 요소만을 제공하는 것. JVM과 핵심 라이브러리, 자바 런타임 환경에서 사용하는 프로퍼티 셋팅이나 리소스 파일만을 가지고 있다. 따라서 개발 관련 도구는 제공하지 않는다. (javac 등의 개발도구는 JDK에서 제공한다.) JDK = JRE + 개발툴(javadoc.exe, javac.exe, javap.exe, jar.exe...). 그런데 오라클에서 자바 9버전부터는 JDK만 제공하고 JRE를 따로 제공하지 않음. 자바9 부터 모듈시스템이 들어왔는데, 이를 이용해서 나만의 JRE를 만들 수 있다.(jLink를 이용해서 모듈의 서브셋을 구성하여 JRE 구현이 가능.. 2022. 4. 7.