■ JVM 이란?
Java Virtual Machine의 줄임말이며 Java byte code를 OS에 맞게 해석해주는 역할을 합니다. Java Compiler는 .java 파일을 .class 라는 Java byte code로 변환시켜 줍니다. Byte code는 기계어가 아니기때문에 OS에서 바로 실행되지 않습니다. 이때 JVM은 OS가 Byte code를 이해할 수 있도록 해석해줍니다. 하지만 JVM의 해석을 거치기 때문에 c언어같은 네이티브 언어에 비해 속도가 느렸지만 JIT (Java In Time) 컴파일러를 구현해 이점을 극복했습니다. Byte Code는 JVM 위에서 OS상관없이 실행된다. 이런 점이 Java의 가장 큰 장점이라고 할수 있습니다. OS에 종속적이지 않고 Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행 할 수 있습니다. JVM은 크게 Class Loader, Runtime Data Areas, Excution Engine 3가지로 구성되어 있고 자세한 설명은 아래에 이이서 하겠습니다.
■ JVM 구조
- Class Loader
RunTime 시점에 클래스를 로딩하게 해주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모리에 로드하게 됩니다.
- Runtime Data Areas
JVM이 프로그램을 수행하기 위해 OS로 부터 별도로 할당 받은 메모리 공간을 말하며, Runtime Data Areas는 크게 5가지 영역으로 나눌 수 있습니다.
- Execution Engine
Load된 Class의 ByteCode를 실행하는 Runtime Module이 바로 Execution Engine입니다. Class Loader를 통해 JVM 내의 Runtime Data Areas 에 배치된 바이트 코드는 Executin Engine에 의해 실행되며, 실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행합니다.
최초 JVM 이 나왔을 당시에는 Interperter방식(한 줄씩 해석하고 실행)이였기 때문에 속도가 느리다는 단점이 있었지만 JIT complier 방식을 통해 이 점을 보완했습니다. JIT는 ByteCode를 어셈블러 같은 NativeCode로 바꿔서 실행이 빠르지만 역시 변환하는데 비용이 발생합니다. 이 같은 이유 때문에 JVM은 모든 코드를 JIT Compiler 방식으로 실행하지 않고 Interpreter 방식을 사용하다 일정한 기준이 넘어가면 JIT Compiler 방식으로 실행합니다.
출처) https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2
'IT 용어 정리' 카테고리의 다른 글
Ioc/DI 란? (0) | 2019.10.09 |
---|---|
Spring Boot 란? (0) | 2019.10.04 |
DAO 와 DTO 란? (0) | 2019.09.26 |
MyBatis 란? (0) | 2019.09.26 |
NoSQL 이란? (0) | 2019.09.17 |