Java의 특징
- Java는 객체 지향 언어이다. 객체 지향 프로그래밍(OOP: Object Oriented Programming)이라고도 한다.
- 함수적 스타일 코딩을 지원한다. 자바 8부터 지원하는 람다식을 사용하여 함수적 프로그래밍이 가능하다.
- JVM의 Garbage Collector를 실행시켜 동적으로 할당된 메모리들을 자동으로 관리한다.
JVM
운영체제는 자바 프로그램을 바로 실행할 수 없는데, 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 이것이 JVM(Java Virtual Machine)이다. JVM은 자바 프로그램을 실행하는 가상 운영체제의 역할을 한다. 운영체제별로 프로그램을 관리하고 실행하는 방식이 다르기 때문에 JVM은 여러 운영체제에서 자바 프로그램의 같은 실행 결과가 나오도록 중계하는 역할을 한다. 따라서 개발자는 운영체제를 신경쓰지 않고 자유롭게 자바 프로그램을 개발할 수 있는 것이다.
그런데 JVM은 운영체제에 종속적이다. 자바 프로그램을 운영체제가 이해하는 기계어로 번역해서 실행해야 하므로 JVM은 운영체제에 맞게 설치되어야 한다. JVM은 JDK 또는 JRE를 설치하면 함께 설치된다.
개발자가 .java 파일(소스 파일)을 작성하고 javac.exe로 컴파일했을 때 .class 파일(바이트 코드)이 생성된다. 바이트 코드 파일은 JVM 구동 명령어에 의해 JVM에서 해석되고 운영체제에 맞게 기계어로 번역된다. 자바 프로그램은 JVM을 거치는 과정 때문에 C와 C++에 비해서 느리다는 단점이 있다. 그러나 현재 속도 격차는 많이 줄어들고 있다.
한 줄 요약 : JVM은 자바 프로그램(바이트 코드)을 운영체제에 맞는 기계어로 번역하여 실행해주는 가상 운영체제 역할을 수행한다.
JVM 구조
위에 설명 외에도 JVM은 다양한 역할을 수행한다. 위에서 JAVA의 특징으로 설명하지 않은 것이 있는데 바로 동적 로딩이라는 특징이다. 자바 애플리케이션은 실행될 때 모든 객체가 생성되지 않고 필요로 하는 시점에 생성된다. 따라서 동적 메모리를 관리하는 주체가 필요한데 C 언어와 C++의 경우 동적 할당 메모리 관리의 책임은 개발자에게 있다. 하지만 자바 애플리케이션은 JVM이 관리해주며, 이 기능을 JVM의 Garbage Collector가 수행한다. 동적 메모리 뿐만 아니라 전반적인 메모리 관리도 JVM이 수행한다. 다양한 데이터를 잘 다루기 위해 JVM은 용도에 맞는 메모리에 데이터를 저장한다. 이 말은 JVM이 메모리를 관리하는 방식과 구조를 알아야 최적화를 진행할 수 있다는 의미이기도 하다.
'JAVA' 카테고리의 다른 글
[기본 시리즈] JVM의 메모리 사용 구조 : Thread 영역 (0) | 2022.08.23 |
---|---|
[기본 시리즈] 해시 테이블과 해시 충돌 그리고 JAVA의 HashMap (0) | 2022.08.18 |
[컬렉션 프레임워크 끝내기] #List (0) | 2022.07.19 |
어노테이션에 대하여 (0) | 2022.07.16 |
JAVA 예외 처리 (0) | 2022.07.11 |