반응형

jvm 4

JVM 메모리 구조

Method Area클래스 정보(메서드, 필드, static 변수 등)를 저장ClassLoader에 의해 로딩된 클래스들의 메타데이터가 올라간다.Java 8 이전에는 PermGen, 이후에는 Metaspace로 대체됨모든 thread가 함께 사용해당 영역 안에 Runtime Constant Pool이 존재Heap Area모든 객체 인스턴스(new)가 생성되는 영역GC의 주요 대상모든 thread가 함께 사용Stack Area메서드 호출 시 로컬 변수, 매개 변수, 리턴 주소 저장PC register현재 실행 중인 JVM 명령의 주소를 저장Native Method StackJVM이 아닌 Native code(C, C++ 등)를 실행할 때 사용하는 Stack public class Example { // M..

JAVA 2025.04.19

JVM GC(Garbage Collection)

C언어의 경우 malloc/free 를 통해서 프로그래머가 직접 메모리를 할당하고 해제해주지만 JVM의 경우에는 메모리를 알아서 관리해주고 있기 때문에 개발자가 직접 관리할 필요가 없어진다. JVM에 다양한 메모리 영역이 존재하는데 그 중에서도 Heap영역에서 다음과 같이 GC가 동작한다.Eden, Survivor, Old 영역들이 존재하는데 간단하게 객체가 생성(new Object()) 되면 Eden Space에 생겨난다.그러고 나서 아직 참조가 되고있는 객체 더이상 참조 되지 않는 객체를 분류한다. 위의 그림에서 Object2가 Mark되어지고 MinorGC에 의해서 메모리 할당이 해제된것으로 보면 된다.그렇게 생존한 객체들이 존재하는 Survivor영역을 왔다갔다 하면서 오래 살아남은 객체는 Old..

JAVA 2025.04.19

JVM(Java Virtual Machine: 자바 가상 머신)

JVM은 하드웨어 및 운영 체제에 독립적인 실행 환경을 제공하며, 컴파일된 코드의 크기를 줄이고, 악성 프로그램으로부터 사용자를 보호하는 역할을 한다. - Oracle Javadoc JVM이 어떻게 저런걸 가능하게 할까?C언어의 경우에는 윈도우용 컴파일러, 리눅스용 컴파일러가 각자 컴파일을 진행하여 실행파일을 만들지만 Java의 경우에는 각 환경에 맞는 JVM이 따로 존재하기 때문에 자바 컴파일러(javac)가 번역한 class file을 어느환경에서나 실행이 가능해진다. 여기서 만들어진 byte code는 JVM이 실행할 수 있는 추상적인 명령어 집합이므로 기계어보다 간결하다. CPU 명령어, 레지스터 정보 등 다양한 정보를 포함해야하는 기계어보다 컴파일된 코드의 사이즈는 작아진다. 이 때, clas..

JAVA 2025.03.13

JVM 초기화 과정(Loading, Linking, Initialization)

Java Virtual Machine(JVM)의 실행 과정은 크게 클래스 및 인터페이스의 로딩(Loading), 연결(Linking), 초기화(Initialization) 세 단계로 이루어집니다.로딩(Loading): JVM은 실행 시 필요한 클래스나 인터페이스를 동적으로 로드합니다. 이는 해당 클래스나 인터페이스의 바이너리 표현을 찾아 이를 JVM의 메서드 영역(Method Area)에 로드하는 과정입니다.연결(Linking): 로드된 클래스나 인터페이스를 JVM의 런타임 상태에 결합하여 실행 가능하게 만드는 과정입니다. 연결은 다음 세 단계로 구성됩니다:검증(Verification): 클래스 파일의 형식과 구조가 JVM의 명세에 부합하는지 확인합니다.준비(Preparation): 클래스나 인터페이스의..

JAVA 2025.03.13
반응형