- JVM 기술스택의 구조를 이해해야 더 좋은 소프트웨어를 개발할 수 있고 성능 이슈 탐색 시 필요한 배경지식을 갖출 수 있음
Write Once, Run Anywhere
을 위해 자바 가상 머신(Java Virtual Machine) 사용- 자바는 실행파일인 java가 실행될 때마다 소프트웨어적으로 가상 머신을 즉시 생성
- 해당 JVM에서는 개발자가 작성한 바이트코드를 실행
👉 플랫폼에 독립적으로 실행 가능
- Hello.java 작성
- 자바 컴파일러(javac) : 자바 프로그램을 가상머신의 명령어로 변환
- Hello.class의 바이트코드 생성
- JVM : 가상머신의 명령어를 실제 기계의 명령어로 변환
- 실행
- 바이트코드
- 가상머신을 위한 코드로, 바이트코드는 다시 JVM에 의해 해석되어 실행됨
- JVM은 다양한 운영체제를 지원하기 때문에 동일한 바이트코드 파일로 윈도우, 리눅스, Mac OS에서 변경없이 실행 가능
- GC(Garbage Collertions)라는 프로세스를 이용해 힙 메모리를 자동 관리
- JVM이 더 많은 메모리를 할당해야할 때 불필요한 메모리를 회수하거나 재사용하는 불확정적 프로세스
- GC가 실행되면 그동안 다른 애플리케이션이 모두 중단됨
- 중단 시간을 아주 짧지만 애플리케이션에 부하가 늘수록 GC 실행시간 역시 무시할 수 없음
- OpenJDK : 자바 기준 구현체를 제공하는 특별한 오픈소스 프로젝트, 오라클이 직접 프로젝트를 주관/지원하며 자바 릴리즈 기준으로 발표
- Oracle : 가장 널리 알려진 구현체, OpenJDK 기반이지만 오라클 상용 라이선스로 재라이선스 받음
- Zulu : Azul System이 제작한 자바 풀 인증을 받은 무료 OpenJDK 구현체, 상용 라이선스 문제없이 자유롭게 재배포 가능
- IcedTea : RedHat 제품으로 풀 인증을 받았으며 재배포 가능
- Zing : Azul System이 제작한 고성능 상용 JVM, 자바 풀 인증을 받았으며 64비트 리눅스에서만 작동, 대용량 힙메모리와 멀티 CPU 서버급 시스템을 위해 설계
- J9 : 이클립스 OMR 프로젝트 기반으로 제작되며 IBM 상용 제품의 근간을 이룸