개괄
IT 인프라 구조라는 책을 읽다가 문득 웹 서버와 AP 서버에 대한 이야기가 나왔다.
웹 서버의 OS 안에는 '프로세스'라는, 독립된 메모리 공간을 가진 것이 있다.
AP서버에도 '스레드'라는 프로세스가 있지만, 웹 서버의 프로세스와는 차이점을 가진다. 바로 AP서버의 스레드는 한 스레드마다 독립적인 메모리 공간을 가지고, 웹 서버의 프로세스는 그 메모리 공간을 같이 공유한다는 것이다.
'JVM도 AP서버의 프로세스중 하나'라고 적혀 있다. 그럼 대체 JVM이 뭘까?
자바를 시작하게 되면 늘 듣게 되는 영단어들이 있다. 그 중 3개를 아마 가장 많이 듣게 될텐데,
자바를 설치할 때 듣는 JDK,
자바를 실행할 때 듣는 JRE,
자바 이론을 공부할 때 든는 JVM이 있다.
(물론 내가 들은 것 기준)
JDK는 Java Development Kit, JRE는 Java Run Environment, JVM은 Java Virtual Machine의 줄임말로, 각각 자바 개발 도구, 자바 실행 환경, 자바 가상 기계라는 뜻을 가지고 있다.
근본?
코틀린이 자바에서 쓰이던 어플리케이션 목적의 개발에서 조금 더 나은 길을 걷고자 나왔듯,
자바도 결국은 C에서 나온 언어다. 자바는 왜 C에서 branch를 뻗게 되었을까?
C는 "One Source Multi Object Use Anywhere"를 모토로, 하나의 소스파일로 각 기계에 맞는 목적파일로 만들어 어디든 사용 가능하게 하려는 프로그램이다. 그러나 개발자들은 기계에 맞는 목적 파일(OS를 맞춰줘야 하는 파일)들이 아니라, 어떤 OS환경에서도 사용하고 싶어했다.
그래서 C의 위에서 아래로 흐르는 절차지향적 언어에서 탈피해, JAVA라는 객체지향적 언어를 만들었다.
자바의 실행
자바는 개발자가 짜놓은 소스파일을 JDK가 제공하는 'java compiler'를 이용하여 실행한다.
JVM의 클래스 로더는 컴파일로 생성된 바이트코드를 전달받아 JVM의 Runtime data area에 로드하고,
JVM의 Execution에 의해 기계어로 해석되어 실행된다.
클래스 로더? Execution?
클래스 로더는 자바로 작성한 모든 클래스, 변수등의 정보를 method area에 배치한다.
이 때 변수 중 하나인, static value라고도 불리는 cv가 생성되고 heap area에 배치된다.
JVM 내부에 바이트 코드를 로드하고, 링크를 통해 배치하는 작업을 수행한다.
인터프리터는 바이트 코드를 한 줄씩 읽고 번역해주는데 매우 느리다.
그래서 JIT 컴파일러가 등장했는데, 컴파일러의 특징은 다음과 같다.
: 바이트 코드 전체를 컴파일하여 캐싱하기 때문에 실행이 매우 빠르고, 미리 오류를 줄여준다.
근데 엑시큐션 얘기하는데 JIT와 인터프리터가 왜 나오냐고? 실행 엔진(Execution)의 실행 방식에 JIT와 인터프리터가 있기 때문이다.
'자바' 카테고리의 다른 글
TIL - 좋은 객체지향적 설계원칙, SOLID(3) : LSP (0) | 2023.01.27 |
---|---|
TIL - OOP 요약 (0) | 2023.01.25 |
TIL - Math.Random은 정말 난수를 리턴할까? (0) | 2023.01.24 |
TIL - THE JAVA(3), NPE와 NULL (1) | 2023.01.20 |
TIL - THE JAVA(2) Flow Chart (0) | 2023.01.20 |