
JVM은 운영체제에 의존하지 않고 Java를 수행할 수 있도록 도와주는 가상 컴퓨터 입니다. 이로 인해, Java는 '운영체제에 독릭접'이라는 특징을 가질 수 있습니다.
왜 운영체제에 의존하지 않나요?
Java는 '한 번 코드를 작성하면 어디서든 실행할 수 있다'라는 철학을 기반으로 설계되었습니다. 이를 위해 JVM이라는 개념을 도입하여 운영체제와의 의존성을 제거하고 이식성을 극대화했습니다.
JVM은 Java Bytecode를 실행하는 가상 환경입니다. JVM은 실행중인 Java Bytecode를 JIT 컴파일러를 통해 실행 가능한 기계어로 변환하는 역할을 수행합니다.
Java Bytecode는 뭔가요?
Java Bytecode는 개발자가 작성한 Java Source Code를 JVM이 실행할 수 있는 명령어 집합으로 변환된 파일 입니다. 이때, Java Source Code는.java확장자를 가지며 Java Bytecode는.class를 가집니다.
그런데 왜 기계어로 변환해야 하나요?
CPU는 고수준 언어를 직접 이해할 수 없습니다. 이를 위해, 저수준 언어로 변환해주는 작업이 필요합니다. 이러한 개발자가 작성한 코드를 CPU가 이해할수 있도록 변환하는 작업을 컴파일이라 합니다.
JVM은 프로그램 실행 중 메모리를 자동으로 관리합니다. 이때, 핵심적인 역할을 하는 것이 GC(Garbage Collection)입니다. GC는 사용하지 않는 객체를 자동으로 정리하여 메모리 누수를 방지하고, 효율적인 메모리 활용을 가능하게 합니다.
JVM은 내장된 매커니즘 동작(스레드 스케줄링, 동기화 관리)을 통해 여러 스레드가 동시에 실행될 수 있도록 관리하며 병렬 처리를 지원합니다. 이를 통해 스레드 간 자원 공유과 데이터 무결성을 보장하며, 효율적인 멀티 스레드 환경을 제공합니다.
JVM은 Java 언어가 운영체제로 부터 독립적으로 수행할 수 있도록 도와주는 가상 머신입니다. 이때, JVM은 운영체제에 의존적이지 않기 위해 반드시 필요한 개념입니다.
Java 언어는 '한 번 작성한 코드를 어디서도 실행할 수 있다'라는 철학을 가진 언어입니다. 이를 위해, 어떤 컴퓨터의 운영체제에서도 별도의 작업 없이 프로그램 실행이 가능할 수 있도록 JVM을 활용하여 이식성을 극대화한 것 입니다.
JVM은 운영체제 의존성 제거, 메모리 관리, 멀티 스레드에 대한 동시성 지원 등의 역할을 수행하고 있습니다.
.class 파일에 대한 검증과 필요한 클래스 및 메서드 로딩 후, Method Area에 보관