Skip to content

Latest commit

 

History

History
37 lines (32 loc) · 2.4 KB

JVM_기초.md

File metadata and controls

37 lines (32 loc) · 2.4 KB

💡 JVM을 알아야하는 이유?

  • JVM 기술스택의 구조를 이해해야 더 좋은 소프트웨어를 개발할 수 있고 성능 이슈 탐색 시 필요한 배경지식을 갖출 수 있음

💡 JVM 사용 이유

  • Write Once, Run Anywhere을 위해 자바 가상 머신(Java Virtual Machine) 사용
  • 자바는 실행파일인 java가 실행될 때마다 소프트웨어적으로 가상 머신을 즉시 생성
  • 해당 JVM에서는 개발자가 작성한 바이트코드를 실행
    👉 플랫폼에 독립적으로 실행 가능

💡 Java 실행과정

  1. Hello.java 작성
  2. 자바 컴파일러(javac) : 자바 프로그램을 가상머신의 명령어로 변환
  3. Hello.class의 바이트코드 생성
  4. JVM : 가상머신의 명령어를 실제 기계의 명령어로 변환
  5. 실행
  • 바이트코드
    • 가상머신을 위한 코드로, 바이트코드는 다시 JVM에 의해 해석되어 실행됨
    • JVM은 다양한 운영체제를 지원하기 때문에 동일한 바이트코드 파일로 윈도우, 리눅스, Mac OS에서 변경없이 실행 가능

💡 JVM 메모리 관리

  • GC(Garbage Collertions)라는 프로세스를 이용해 힙 메모리를 자동 관리
  • JVM이 더 많은 메모리를 할당해야할 때 불필요한 메모리를 회수하거나 재사용하는 불확정적 프로세스
  • GC가 실행되면 그동안 다른 애플리케이션이 모두 중단됨
  • 중단 시간을 아주 짧지만 애플리케이션에 부하가 늘수록 GC 실행시간 역시 무시할 수 없음

💡 JVM 구현체 종류

  • OpenJDK : 자바 기준 구현체를 제공하는 특별한 오픈소스 프로젝트, 오라클이 직접 프로젝트를 주관/지원하며 자바 릴리즈 기준으로 발표
  • Oracle : 가장 널리 알려진 구현체, OpenJDK 기반이지만 오라클 상용 라이선스로 재라이선스 받음
  • Zulu : Azul System이 제작한 자바 풀 인증을 받은 무료 OpenJDK 구현체, 상용 라이선스 문제없이 자유롭게 재배포 가능
  • IcedTea : RedHat 제품으로 풀 인증을 받았으며 재배포 가능
  • Zing : Azul System이 제작한 고성능 상용 JVM, 자바 풀 인증을 받았으며 64비트 리눅스에서만 작동, 대용량 힙메모리와 멀티 CPU 서버급 시스템을 위해 설계
  • J9 : 이클립스 OMR 프로젝트 기반으로 제작되며 IBM 상용 제품의 근간을 이룸