Blog

[CS]05 JVM 이란 무엇이고 왜 필요한지 설명해주실 수 있을까요?

Author
Summary
JVM 이란?
Category
Study
Tags
CS
Favorite
Memory Date
2023/10/12
Cross Reference Study
Related Media
Related Thought
Related Lessons
tag
날짜
작성자
진행상황
진행 전
태그구분
6 more properties
JVM 이란 무엇이고 왜 필요한지 설명해주실 수 있을까요?
JVM은 자바 가상 머신(Java Virtual Machine)입니다. JVM에서 강조되는 기술은 크게 3개가 있습니다.
첫번째로, 하드웨어 및 운영 체제 독립성, 두번째로 저용량의 컴파일된 코드를 사용, 세번째로 악성 프로그램으로부터 사용자를 보호하는 것입니다.
위 특징들을 통해 개발자의 소스 코드를, 빠르고 안정적으로, 그리고 JRE가 설치된 곳 어디에서나 실행 할 수 있는 장점이 있습니다. 이러한 특징들을 통해 JVM은 개발자에게 편의성과 안정성을 제공하며, 사용자에게는 안전하고 일관된 환경에서 자바 프로그램을 실행할 수 있는 기반을 제공하기 때문에 필요합니다.
추가질문 그럼 각 특징들에 대해서 조금 더 자세히 알려주세요?
첫번째로 가장 핵심으로 생각하는 독립성입니다. JVM이 속해있는 상위 그룹인 JRE가 설치되어 있는 OS와 하드웨어는 Java 프로그램을 실행 시킬 수 있습니다. 1995년에 썬 마이크로시스템즈가 만든 자바의 표어는 “Write OnceRun Anywhere”한번 작성하면 어디서든 실행 할 수 있다는 슬로건을 가지고 있습니다.
JVM은 JRE라는 Java Runtime Environment, 곧 자바 실행 환경이란 곳 안에 있습니다. 컴퓨터를 예를 들면 윈도우즈 위에 JRE가 설치되어 있으면, 그 안의 JVM을 사용 할 수 있다는 것이며, 바이트코드까지 컴파일된 개발자의 Java 프로그램은 그 하드웨어 및 OS에서 실행 할 수 있습니다. 다른 컴퓨터, 다른OS더라도 OS에 맞는 JRE가 설치되어 있고 동일한 Java프로그램이면 동일한 프로그램이 작동합니다. 이것이 Java의 핵심 기술인 하드웨어 및 운영 체제로부터의 독립성을 보여주는 예시입니다.
두번째 JVM이 실제로 하는 일은 개발자가 작성한 코드는 컴파일 과정을 통해 JVM이 이해할 수 있는 언어인 바이트 코드로 변환되는데 이 바이트 코드 읽어서 실제 기계가 이해할 수 있는 언어인 기계어로 해석해주고 메모리로 로드하는, 옮겨주는 역할을 합니다. 이 부분에서 JVM이 강조하는 두번째 특징인 저용량의 컴파일된 코드를 사용한다는 점을 볼 수 있습니다.
바이트 코드는 상대적으로 기계어보다 사람이 읽고 관리하기 편리한 편이면서 개발자의 소스코드를 효율적으로 저장 할 수 있습니다. 상대적으로 작은 용량이란 점에서 전송, 저장 등 에서 효율적입니다.
마지막으로, 악성 프로그램으로부터 사용자를 보호하는 기능을 강조하고 있습니다. 우선 JVM은 클래스 로더와 보안 매니저를 통해 클래스의 로딩과 액세스를 관리합니다.이를 통해 악의적인 클래스 또는 코드의 로딩을 방지할 수 있습니다. 예외 처리 및 다중 스레드를 효율적으로 관리하고 제어하면서 보안을 돕는 부분이 있습니다. 이러한 부분들은 안전한 실행 환경을 제공하여 악성 코드의 실행을 방지하고, 예외나 오류를 적절히 처리하여 시스템을 더욱 안정적으로 만드는 데에 기여합니다.
추가질문 그럼 JVM의 구성에 대해서 조금 더 자세히 알려주세요?
자바 가상 머신(JVM)은 다음과 같이 구성됩니다.
1. 자바 인터프리터(interpreter)
2. 클래스 로더(class loader)
3. JIT 컴파일러(Just-In-Time compiler)
4. 가비지 컬렉터(garbage collector)
자바 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는 것이 자바 인터프리터(interpreter)입니다.
자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결됩니다.
이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더(class loader)입니다.
JIT 컴파일러(Just-In-Time compiler)란 프로그램이 실행 중인 런타임에 실제 기계어로 변환해 주는 컴파일러를 의미합니다.
동적 번역(dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발되었습니다.
즉, JIT 컴파일러는 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는 데 사용합니다.
자바 가상 머신은 가비지 컬렉터(garbage collector)를 이용하여 더는 사용하지 않는 메모리를 자동으로 회수해 줍니다.
따라서 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와줍니다.