ꎀ늬 메뉎

𝑆𝑢𝑛𝑠ℎ𝑖𝑛𝑒 𝑎𝑓𝑡𝑒𝑟 𝑟𝑎𝑖𝑛✧

[Review] JVM 밑바닥까지 파헀치Ʞ - 1. 자바 Ʞ술 시슀템 볞묞

𝗣𝗿𝗌𝗎𝗿𝗮𝗺𝗺𝗶𝗻𝗎💻/𝐉𝐚𝐯𝐚

[Review] JVM 밑바닥까지 파헀치Ʞ - 1. 자바 Ʞ술 시슀템

🀍Ryusun🀍 2025. 2. 1. 10:31

자바

  • 프로귞래밍 얞얎뿐 아니띌 여러가지 소프튞웚얎와 명섞로 구성된 Ʞ술 시슀템
  • 크로슀 플랫폌 소프튞웚얎륌 개발하고 배포하는데 필요한 몚든 것을 제공
  • 상당히 안전한 메몚늬 ꎀ늬 시슀템을 ê°–ì·„ë‹€.
  • 런타임에 핫윔드륌 감지, 컎파음하고 최적화하여 자바 애플늬쌀읎션읎 최상의 성능을 낎도록 도와쀀닀.
  • 표쀀 API 풍부, 수많은 Ʞ업곌 였픈 소슀 컀뮀니티에서 제공하는 닀양한 Ʞ능의 서드 파티 띌읎람러늬 활용읎 가능하닀.

자바 Ʞ술 시슀템

 

음반적윌로 자바 가상 뚞신위에서 동작하는 윔틀늰, 큎로저, JRuby, 귞룚비 등 프로귞래밍 얞얎와 ê·ž 왞 ꎀ렚 프로귞랚듀도 자바 Ʞ술 시슀템에 속한닀.

전통적윌로 자바 Ʞ술 시슀템은 닀음 요소듀을 포핚한닀.

  • 자바 프로귞래밍 ì–žì–Ž
  • (닀양한 하드웚얎 플랫폌용) 자바 가상 ëšžì‹  구현
  • 큎래슀 파음 포맷
  • 자바 큎래슀 띌읎람러늬 API(표쀀 API)
  • 닀륞 Ʞ업곌 였픈 소슀 컀뮀니티에서 제공하는 서드 파티 큎래슀 띌읎람러늬

 

JDK

  • 자바 프로귞래밍 ì–žì–Ž, 자바 가상뚞신, 자바 큎래슀 띌읎람러늬륌 묶은것.
  • 자바 프로귞랚 개발에 필요한 최소한의 환겜
  • JDK 용얎는 자바 Ʞ술 시슀템 전첎 섞대륌 지칭할때도 자죌 쓰읞닀.

 

JRE

  • 자바 SE API와 자바 가상 ëšžì‹  귞늬고 배포 Ʞ술까지 묶은것.
  • 자바 프로귞랚을 싀행할수 있는 표쀀 환겜을 제공

 

 

 


핫슀팟 가상뚞신

서버용 제품처럌 장Ʞ간 욎용되는 애플늬쌀읎션에서는 자죌 싀행되는 핫 윔드륌 탐지하여 넀읎티람 윔드로 컎파음한닀.

불곌 몇년 전만 하더띌도 많은 CPU윔얎륌 사용할 수 없었고 CPU윔얎가 하나뿐읞 사용자륌 위핎 만듀얎진 것읎 HotSpot 큎띌읎얞튞 컎파음러읎닀.

핫슀팟 가상 뚞신은 Ʞ볞적윌로 JIT 컎파음러륌 두개 낎장하고 있닀.

  • 큎띌읎얞튞 컎파음러(C1 컎파음러)
    • 컎파음 속도가 빠륞 대신 최적화륌 적게한닀.
    • 서버 컎파음러볎닀 뚌저 컎파음을 시작한닀.
    • Start-Up 시간읎 빠륎닀. 하지만 최적화가 덜하Ʞ 때묞에 윔드싀행은 서버가 더 빠륎닀.
  • 서버 컎파음러(C2 컎파음러)
    • 컎파음전에 많은 정볎륌 수집하여 컎파음 속도는 느늬지만, 더 많은 최적화에 쀑점을 둔닀.
    • 서버 컎파음러는 절대로 몚든 윔드륌 컎파음하지 않는닀

여Ʞ에 읞터프늬터까지 포핚하여 쎝 3개의 싀행 메컀니슘읎 협력하여 핫슀팟 가상 뚞신의 싀행 서람 시슀템을 구성한닀.

예전에는 HotSpot JVM읎 죌로 사용되었지만, 지ꞈ은 GraalVM읎나 OpenJ9 ë“± 닀양한 JVM 구현읎 죌목받고 있닀.

GraalVM컎파음러는 C2컎파음러륌 대첎할 목적윌로 핫슀팟에 도입되었닀.

 

GraalVM

  • Oracle에서 개발
  • 넀읎티람 읎믞지 컎파음 지원(슉, 빠륞 시작 속도와 낮은 메몚늬 사용)
  • 닀쀑 ì–žì–Ž 지원(JavaScript, Python, Ruby 등)
  • 큎띌우드 넀읎티람 애플늬쌀읎션에 적합
  • 현재 íŽëŒìš°ë“œ 넀읎티람 환겜읎나 ì»ší…ŒìŽë„ˆ êž°ë°˜ 배포에서는 GraalVM곌 같은 겜량화된 JVM읎 선혞되는 겜우가 많닀.

장점

  • 컎파음된 윔드의 출력 품질읎 좋닀.
  • 개발 횚윚곌 확장성 잡멎에서는 C2와 비교하Ʞ 얎렀욞 만큌 훌륭하닀.
  • 부분 탈출 분석(partial escape analysis) 처럌 C2 볎닀 복잡한 최적화도 수행할 수 있닀.
  • 또한 맞춀형 가정 등을 추가핎 공격적 예잡 최적화(aggressivfe speculative optimization)륌 적용하Ʞ도 수월하닀.

 


 

넀읎티람륌 향한 발걞음

장시간 싀행할 필요가 없거나 크Ʞ가 작은 애플늬쌀읎션의 겜우 자바로 개발하멎 닚점읎 있닀.

  • HelloWorld륌 싀행하렀 핮도 불필요한 JRE 가 필요한 점
  • 애플늬쌀읎션 아킀텍처의 쀑심은 거대한 닚음 아킀텍처 -> 작은 마읎크로서비슀 아킀텍처 로 빠륎게 옮겚가고 있지만, 자바는 읎 추섞와 잘 맞지 않는닀.

 

마읎크로 서비슀 아킀텍처에서는 분할 된 서비슀 각각읎 많은 메몚늬륌 ì“ž 음은 없닀. 고가용성 서비슀 큎러슀터륌 활용하멎 얞제든지 쀑닚하고 업데읎튞할수 있Ʞ때묞에,  ë‹šìŒ 서비슀륌 쀑닚 없읎 싀행하Ʞ 위핎 늬소슀가 쀄얎든닀.  í•˜ì§€ë§Œ 자바는 구동 시간읎 êžžê³  최고 성능을 ë‚Žêž° 까지 예엎읎 필요하므로 마읎크로 서비슀가 요구하는 특성곌는 반대읎닀. 

읎러한 닚점윌로 최귌 JDK 에는 애플늬쌀읎션 큎래슀 데읎터 공유(Application Class Data Sharing, AppCDS)와 녞옵(no-op) 가비지 컬렉터읞 엡싀론 등의 Ʞ술읎 포핚되었닀.

 

AppCDS(Application Class Data Sharing, AppCDS)

  • 로딩한 큎래슀 정볎륌 캐시핎 두얎 닀음번 구동 시간을 쀄읎는 Ʞ술

엡싀론

  • 메몚늬륌 할당만 핎쀄 뿐 회수는 하지않는 컀렉터
  • ê°„ë‹ší•œ 작업을 빠륎게 처늬후 슉시 종료하는 애플늬쌀읎션에 적합

더 ꞉진적읞 Ʞ술로는 애플늬쌀읎션을 싀행하Ʞ 전에 넀읎티람 윔드로 컎파음핎두는 AOT 컎파음읎 있닀.

 

 

AOT(Ahead of Time)

 

장점

  • 자바 가상뚞신은 애플늬쌀읎션을 우선 싀행한후 JIT 컎파음을 썚서 빈번하게 싀행되는 로직을 넀읎티람 윔드로 바꿔 싀행했닀.
  • 하지만 컎파음을 믞늬 핎두멎 예엎 곌정을 걎너 뛰고 처음부터 넀읎티람 윔드륌 싀행할 수 있닀. 
  • 시간 압박 없읎 프로귞랚 전첎륌 완벜하게 분석하여 최적화할수 있닀.

닚점

  • 한번 작성하멎 얎디서든 싀행되는 자바와 닀륎게, 하드웚얎와 욎영 첎제별로 따로 컎파음핎 배포핎알한닀.
  • 컎파음할 윔드에 대한 몚든 것을 컎파음 타임에 알수 있얎알 하므로, 자바 동적 링크 특성읎 크게 쀄얎든닀.

 

서람슀튞레읎튞 VM(Substrate VM)

  • 사전 컎파음된 넀읎티람 윔드륌 핫슀팟 가상 ëšžì‹  없읎 싀행되는 Ʞ술로 독자적읞 예왞 처늬, 슀레드 ꎀ늬, 메몚늬 ꎀ늬, 자바 넀읎티람 읞터페읎슀 을 갖춘 작은 런타임 환겜

장점

  • 자바 가상 뚞신읎 수행하던 쎈Ʞ화 곌정을 걎너뛰고, 프로귞랚을 곧바로 싀행하여 쎈Ʞ 구동 시간을 쀄읞닀.
  • 메몚늬 사용량을 크게 쀄여쀀닀.(핫슀팟 가상 뚞신은 ê·ž 자첎로도 많은 메몚늬륌 사용한닀)

닚점

  • 컎파음러가 찟을수 없는 윔드나 큎래슀 띌읎람러늬륌 동적윌로 읜얎듀음수 없얎 프로귞랚읎 완결된 형태여알 한닀.

 

 

 

ì°žê³  

1. https://product.kyobobook.co.kr/detail/S000213057051

 

JVM 밑바닥까지 파헀치Ʞ | 저우슈밍 - 교볎묞고

JVM 밑바닥까지 파헀치Ʞ | 자바 가상 뚞신의 깊숙한 낎부륌 향핎 떠나는 흥믞진진한 몚험C·C++륌 사용핎 죌로 프로귞래밍을 하던 시절 까닀로욎 메몚늬 ꎀ늬와 플랫폌 읎식성 묞제는 개발자듀에

product.kyobobook.co.kr

 

2. https://isaac1102.github.io/2021/01/16/hotspotjvm

 

[ JAVA ] HotSpot JVM

사싀 HotSpot읎띌는 닚얎륌 듀었을 때 가장 뚌저 떠였륞 의믞는 핫슀팟 또는 핫슀폿(영얎: hotspot)은 슀마튞폰, 녞튞북을 포핚한 읎동 닚말Ʞ로 띌우터 등 묎선 액섞슀 포읞튞가 섀치된 지역에서 묎

isaac1102.github.io