[Java] 자바란(JDK, JRE, JVM)
by hiSonJAVA
- 가전 전자 제품에 들어가는 칩의 프로그램을 제어할 수 있는 언어인 OAK를 발전시킨 언어이다.
- 1990년 초 Sun Microsystems 엔지니어 그룹의 [제임스 고슬링] 팀에서 개발되었다.
- C++을 기반으로 작성된 언어이다.
- JVM(Java Virtual Machine)이라는 Platform(플랫폼) 위에서만 작동하므로 다른 Platform(플랫폼=기반=OS)에 종속되지 않고 독립적이다.
- 컴파일러 언어
- 다중 스레드를 지원하여 효율적인 멀티 처리 효과를 볼 수 있다.
- 메모리를 할당받아 사용한 후 메모리를 자동으로 분리수거(Garbage Collection)하여 해제한다.
- C++ 언어는 할당받아 사용한 메모리를 사용자가 직접 코드 상에서 해제시켜야 한다.
JDK(JAVA Development Kit)
자바 개발도구이다. JRE에서 개발을 위해 필요한 도구와 라이브러리의 집합이다.
- 컴파일러(javac.exe) : 개발자가 자바 문법에 맞추어 작성한 [*.java 파일]을 [*.class 파일]로 변환한다.
- 인터프리터(java.exe) : *.class 파일 안의 언어를 [기계어]로 바꾸는 역할을 한다.
JRE(Java Runtime Environment)
컴파일된 자바 프로그램(*.class)을 실행할 수 있도록 해주는 환경을 제공한다.
- JVM : java.exe가 *.class 파일 안의 byte code를 읽어 기계어로 변환한 후 실행할 수 있는 환경을 제공한다.
- Java API : 자바 언어와 관련된 다양한 기능과 클래스들을 포함한다.
- 클래스 로더 : *.class 파일을 JVM 영역으로 로드하고 메모리에 적재한다.
JVM(Java Virtual Machine)
Java Byte Code를 실행하는 주체이다. 즉, 자바 소스코드로부터 만들어진 *.class파일을 실행할 수 있는 뜻이다. 컴파일된 바이너리 코드(.class)는 어떤 JVM에서도 동작할 수 있다.
JVM의 특징
- 스택 기반의 가상머신 : 대표적인 컴퓨터 아키텍처인 인텔 x86 아키텍처나 ARM 아키텍처와 같은 하드웨어가 레지스터 기반으로 동작하는 데 비해 JVM은 스택 기반으로 동작한다.
- 심볼릭 레퍼런스 : 기본 자료형(primitive data type)을 제외한 모든 타입(클래스와 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 통해 참조한다.
- 가비지 컬렉션 : 클래스 인스턴스는 사용자 코드에 의해 명시적으로 생성되고 가비지 컬렉션에 의해 자동으로 파괴된다.
- 기본 자료형을 명확하게 정의하여 플랫폼 독립성 보장 : C/C++ 등의 전통적인 언어는 플랫폼에 따라 int 형의 크기가 변한다. JVM은 기본 자료형을 명확하게 정의하여 호환성을 유지하고 플랫폼 독립성을 보장한다.
- 네트워크 바이트 오더 : 자바 클래스 파일은 네트워크 바이트 오더를 사용한다. 인텔 x86 아키텍처가 사용하는 리틀 엔디안이나, RISC 계열 아키텍처가 주로 사용하는 빅 엔디안 사이에서 플랫폼 독립성을 유지하려면 고정된 바이트 오더를 유지해야 하므로 네트워크 전송 시에 사용하는 바이트 오더인 네트워크 바이트 오더를 사용한다. 네트워크 바이트 오더는 빅 엔디안이다.
참고
'💻Java' 카테고리의 다른 글
[Java] 기본형과 참조형 (0) | 2023.05.01 |
---|
블로그의 정보
개발 보석함
hiSon