λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[JVM] λ„€μ΄ν‹°λΈŒ μ½”λ“œμ™€ JVM

좜처

ChatGPT


λ„€μ΄ν‹°λΈŒ μ½”λ“œ Native Code

λ„€μ΄ν‹°λΈŒ μ½”λ“œλž€ νŠΉμ • ν•˜λ“œμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ™€ 운영 μ²΄μ œμ—μ„œ 직접 μ‹€ν•΄μ• λ˜λŠ” 기계어(machine code)λ₯Ό λ§Œν•œλ‹€. λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 직접 μ΄ν•΄ν•˜κ³  μ‹€ν–‰ν•  수 μžˆλŠ” ν˜•νƒœμ˜ μ½”λ“œμ΄κΈ° λ•Œλ¬Έμ—, λ‹€λ₯Έ 쀑간 λ ˆμ΄μ–΄(예: 가상 머진 λ˜λŠ” 인터프리터 )λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  직접 μ‹€ν–‰λœλ‹€.

 

λ„€μ΄ν‹°λΈŒ μ½”λ“œ νŠΉμ§•

1. 기계어

  • λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” CPUκ°€ 직접 이해할 수 μžˆλŠ” 이진 ν˜•μ‹μ˜ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λœλ‹€.
  • 각 CPU μ•„ν‚€ν…μ²˜(예: x86, ARM)에 따라 λ‹€λ₯Έ λͺ…λ Ήμ–΄ μ„ΈνŠΈλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, νŠΉμ • ν•˜λ“œμ›¨μ–΄μ— μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€.

2. ν”Œλž«νΌ 의쑴적

  • νŠΉμ • ν•˜λ“œμ›¨μ–΄μ™€ 운영 μ²΄μ œμ— 쒅속적이닀. 즉, ν•œ ν”Œλž«νΌμ—μ„œ 컴파일된 λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” λ‹€λ₯Έ ν”Œλž«νΌμ—μ„œ μ‹€ν–‰λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, x86 ν”„λ‘œμ„Έμ„œλ₯Ό μœ„ν•œ λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” ARM ν”„λ‘œμ„Έμ„œμ—μ„œ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

3. λΉ λ₯Έ μ‹€ν–‰ 속도

  • 쀑간 λ ˆμ΄μ–΄ 없이 직접 μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—, μΈν„°ν”„λ¦¬ν„°λ‚˜ 가상 머신을 μ‚¬μš©ν•˜λŠ” μ½”λ“œλ³΄λ‹€ λΉ λ₯΄κ²Œ 싀행될 수 μžˆλ‹€.
  • μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ ν™”λ₯Ό 톡해 CPU와 λ©”λͺ¨λ¦¬ ꡬ쑰에 맞게 μ½”λ“œλ₯Ό μ΅œμ ν™”ν•  수 μžˆλ‹€.

4. μ»΄νŒŒμΌλŸ¬μ—μ˜ 생성됨

κ³ κΈ‰ μ–Έμ–΄λ‘œ μž‘μ„±λœ μ½”λ“œλŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜λœλ‹€.

예λ₯Ό λ“€μ–΄, C/C++둜 μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ 컴파일 λ‹¨κ³„μ—μ„œ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜λœλ‹€.

 

λ„€μ΄ν‹°λΈŒ μ½”λ“œμ™€ JVM

Java와 같은 μ–Έμ–΄μ—μ„œλŠ” JVM(Java Virtual Machine)을 톡해 λ°”μ΄νŠΈμ½”λ“œ(Bytecode)λ₯Ό μ‹€ν–‰ν•œλ‹€. λ°”μ΄νŠΈμ½”λ“œλ₯Ό ν”Œλž«νΌ 독립적인 쀑간 μ½”λ“œλ‘œ, λͺ¨λ“  JVMμ—μ„œ 싀행될 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ JVM이 λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰ν•  λ•Œ, Just-In-Time (JIT) μ»΄νŒŒμΌλŸ¬κ°€ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

JIT 컴파일러의 μ—­ν• 

1. 동적 컴파일

JIT μ»΄νŒŒμΌλŸ¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€. 이 λ³€ν™˜ 과정은 λŸ°νƒ€μž„μ— μˆ˜ν–‰λ˜λ©°, 자주 μ‹€ν–‰λ˜λŠ” μ½”λ“œ 패슀λ₯Ό μ΅œμ ν™”ν•œλ‹€.

2. μ„±λŠ₯ μ΅œμ ν™”

JITλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 높이기 μœ„ν•΄ μ‹€ν–‰ 쀑인 μ½”λ“œμ˜ ν”„λ‘œνŒŒμΌ 정보λ₯Ό μˆ˜μ§‘ν•˜κ³ , 이 정보λ₯Ό 기반으둜 μ΅œμ ν™”λ₯Ό μˆ˜ν–‰ν•œλ‹€.

 

λ„€μ΄ν‹°λΈŒ μ½”λ“œμ˜ μ˜ˆμ‹œ

C ν”„λ‘œκ·Έλž¨μ„ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ μ»΄νŒŒμΌν•˜λŠ” μ˜ˆμ‹œ

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

 

μœ„μ˜ C μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜λ©΄, C 컴파일러(gcc λ˜λŠ” clang λ“±)κ°€ 이 μ½”λ“œλ₯Ό λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€. 예λ₯Ό λ“€μ–΄, x86 μ•„ν‚€ν…μ²˜μ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λœλ‹€.

λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ 컴파일 κ³Όμ •

 

  1. ν”„λ¦¬ν”„λ‘œμ„Έμ‹±: μ „μ²˜λ¦¬κΈ°(Preprocessor)κ°€ #include와 같은 λ””λ ‰ν‹°λΈŒλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  2. 컴파일: κ³ κΈ‰ μ–Έμ–΄ μ½”λ“œλ₯Ό 쀑간 μ½”λ“œ(IR, Intermediate Representation)둜 λ³€ν™˜ν•©λ‹ˆλ‹€.
  3. μ–΄μ…ˆλΈ”λ¦¬: 쀑간 μ½”λ“œλ₯Ό μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
  4. 링킹: μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ₯Ό λ„€μ΄ν‹°λΈŒ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜κ³ , ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

 

 

λ„€μ΄ν‹°λΈŒ μ½”λ“œ vs λ°”μ΄νŠΈ μ½”λ“œ

νŠΉμ„± λ„€μ΄ν‹°λΈŒ μ½”λ“œ λ°”μ΄νŠΈμ½”λ“œ
쒅속성 ν”Œλž«νΌμ— 쒅속적 ν”Œλž«νΌ 독립적
μ‹€ν–‰ 속도 맀우 λΉ λ₯΄λ‹€ 느림(인터프리터 λ˜λŠ” VM에 의쑴)
μœ μ—°μ„± λ³€κ²½ μ‹œ λ‹€μ‹œ 컴파일이 ν•„μš”ν•˜λ‹€ λ³€κ²½ μ‹œ 즉각적 반영 κ°€λŠ₯(JVM μ‚¬μš©)
μ½”λ“œ 크기 μ΅œμ ν™”λœ μž‘μ€ 크기 비ꡐ적 ν¬κ±°λ‚˜ μ΅œμ ν™”λ˜μ§€ μ•ŠμŒ
배포 및 μœ μ§€λ³΄μˆ˜ ν”Œλž«νΌλ³„ 별도 배포 ν•„μš” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ λ™μΌν•œ 배포 κ°€λŠ₯

 

λ„€μ΄ν‹°λΈŒ μ½”λ“œμ™€ AOT 컴파일

AOT(Ahead-Of-Time) μ»΄νŒŒμΌλŸ¬λŠ” JIT와 달리 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 전에 μ†ŒμŠ€ μ½”λ“œ λ˜λŠ” λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€. Java의 GraalVM λ˜λŠ”.NET의 CoreRT 같은 기술이 AOT μ»΄νŒŒμΌμ„ μ§€μ›ν•œλ‹€.

μž₯점

1. λΉ λ₯Έ μ‹œμž‘ μ‹œκ°„

  • 앱이 μ‹€ν–‰λ˜κΈ° 전에 이미 λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ μ»΄νŒŒμΌλ˜μ–΄ μžˆμ–΄ 싀행이 λΉ λ₯΄λ‹€

2. 배터리 νš¨μœ¨μ„±

  • λͺ¨λ°”일 ν™˜κ²½μ—μ„œλŠ” λŸ°νƒ€μž„ 컴파일 뢀담이 쀄어듀어 배터리 νš¨μœ¨μ„±μ΄ λ†’λ‹€.

단점

1. ν”Œλž«νΌ 쒅속성

  • AOT둜 컴파일된 μ½”λ“œλŠ” νŠΉμ • ν”Œλž«νΌμ— μ’…μ†μ μ΄λ―€λ‘œ, 각 ν”Œλž«νΌμ— λ§žλŠ” λ„€μ΄ν‹°λΈŒ μ½”λ“œλ₯Ό λ³„λ‘œλ„ μ€€λΉ„ν•΄μ•Ό ν•œλ‹€.

2. 초기 컴파일 μ‹œκ°„ 증가

  • 초기 컴파일 μ‹œκ°„κ³Ό μ €μž₯ 곡간이 증가할 수 μžˆλ‹€.

 

κ²°λ‘ 

λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” 컴퓨터 ν•˜λ“œμ›¨μ–΄κ°€ 직접 μ‹€ν–‰ν•  수 μžˆλŠ” 기계어 ν˜•νƒœμ˜ μ½”λ“œλ‘œ, μ‹€ν–‰ 속도와 νš¨μœ¨μ„±μ΄ λ›°μ–΄λ‚˜λ‹€. JIT와 AOT μ»΄νŒŒμΌλŸ¬λŠ” κ³ κΈ‰ μ–Έμ–΄λ‘œ μž‘μ„±λœ μ½”λ“œ λ˜λŠ” λ°”μ΄νŠΈμ½”λ“œλ₯Ό λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜ν•˜μ—¬, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•œλ‹€. μ΄λŸ¬ν•œ 방식은 λ‹€μ–‘ν•œ ν”Œλž«νΌμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό κ°œλ°œν•˜λŠ” 데 μžˆμ–΄ μ€‘μš”ν•œ 역할을 ν•˜λ©°, μ„±λŠ₯ μ΅œμ ν™”μ—λ„ 크게 κΈ°μ—¬ν•œλ‹€.


ChatGPTμ—κ²Œ 이 κΈ€μ˜ 좜처λ₯Ό λ¬Όμ—ˆλ‹€.

λ„€μ΄ν‹°λΈŒ μ½”λ“œμ— λŒ€ν•œ 좜처

  1. "Computer Systems: A Programmer's Perspective" by Randal E. Bryant and David R. O'Hallaron
    • λ‚΄μš©: 이 책은 컴퓨터 μ‹œμŠ€ν…œμ˜ λ‚΄λΆ€ ꡬ쑰와 μž‘λ™ 방식을 ν”„λ‘œκ·Έλž˜λ¨Έ κ΄€μ μ—μ„œ μ„€λͺ…ν•˜λ©°, λ„€μ΄ν‹°λΈŒ μ½”λ“œμ˜ κ°œλ…κ³Ό μ€‘μš”μ„±μ„ λ‹€λ£Ήλ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” ν•˜λ“œμ›¨μ–΄κ°€ 직접 이해할 수 μžˆλŠ” κΈ°κ³„μ–΄λ‘œ 컴파일된 ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€.
      • ν”„λ‘œκ·Έλž¨μ΄ νŠΉμ • ν”Œλž«νΌμ—μ„œ μ΅œλŒ€μ˜ μ„±λŠ₯을 λ°œνœ˜ν•  수 μžˆλ„λ‘ μ΅œμ ν™”λœ ν˜•νƒœμž…λ‹ˆλ‹€.
    • 링크: Computer Systems on Amazon
  2. "Modern Operating Systems" by Andrew S. Tanenbaum
    • λ‚΄μš©: 이 책은 운영 체제의 κΈ°λ³Έ 원리와 λ‹€μ–‘ν•œ ꡬ쑰λ₯Ό μ„€λͺ…ν•˜λ©°, λ„€μ΄ν‹°λΈŒ μ½”λ“œκ°€ 운영 체제의 μ‹€ν–‰κ³Ό κ΄€λ ¨λœ 뢀뢄을 λ‹€λ£Ήλ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” 운영 μ²΄μ œκ°€ 직접 μ‹€ν–‰ν•  수 μžˆλŠ” 이진 ν˜•νƒœλ‘œ μ»΄νŒŒμΌλ©λ‹ˆλ‹€.
      • λ‹€μ–‘ν•œ 운영 μ²΄μ œμ™€ ν•˜λ“œμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ— 맞좰 μ„€κ³„λœ ν”„λ‘œκ·Έλž¨μ€ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ μ»΄νŒŒμΌλ˜μ–΄ μ„±λŠ₯을 μ΅œμ ν™”ν•©λ‹ˆλ‹€.
    • 링크: Modern Operating Systems on Amazon
  3. "Compilers: Principles, Techniques, and Tools" by Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
    • λ‚΄μš©: 컴파일러 이둠과 μ„€κ³„μ˜ 기초λ₯Ό 닀루며, μ†ŒμŠ€ μ½”λ“œκ°€ λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ λ³€ν™˜λ˜λŠ” 과정을 μ„€λͺ…ν•©λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ„€μ΄ν‹°λΈŒ μ½”λ“œ λ³€ν™˜μ€ μ†ŒμŠ€ μ½”λ“œλ₯Ό νŠΉμ • ν•˜λ“œμ›¨μ–΄μ— 맞좘 μ΅œμ ν™”λœ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.
      • 이 과정은 컴파일러의 μ΅œμ ν™” λ‹¨κ³„μ—μ„œ 이루어지며, μ„±λŠ₯ ν–₯상에 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
    • 링크: Compilers on Amazon
  4. "Programming Language Pragmatics" by Michael L. Scott
    • λ‚΄μš©: 이 책은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 섀계와 κ΅¬ν˜„μ— κ΄€ν•œ λ‚΄μš©μ„ 닀루며, λ„€μ΄ν‹°λΈŒ μ½”λ“œμ™€ κ΄€λ ¨λœ λ‹€μ–‘ν•œ κ°œλ…μ„ μ„€λͺ…ν•©λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” νŠΉμ • ν”Œλž«νΌμ˜ CPU와 운영 μ²΄μ œμ—μ„œ 직접 μ‹€ν–‰λ˜λŠ” ν˜•νƒœμ˜ μ½”λ“œμž…λ‹ˆλ‹€.
      • 이 μ½”λ“œλŠ” ν”Œλž«νΌμ— μ΅œμ ν™”λ˜μ–΄ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 링크: Programming Language Pragmatics on Amazon
  5. "The Art of Computer Programming" by Donald E. Knuth
    • λ‚΄μš©: 이 책은 컴퓨터 κ³Όν•™μ˜ λ‹€μ–‘ν•œ 주제λ₯Ό 닀루며, 특히 μ•Œκ³ λ¦¬μ¦˜κ³Ό 기계어, λ„€μ΄ν‹°λΈŒ μ½”λ“œμ˜ κ΅¬ν˜„μ— κ΄€ν•œ λ‚΄μš©μ„ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ„€μ΄ν‹°λΈŒ μ½”λ“œλŠ” κ³ κΈ‰ μ–Έμ–΄μ—μ„œ μž‘μ„±λœ μ½”λ“œκ°€ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λ˜μ–΄ CPUμ—μ„œ 직접 μ‹€ν–‰λ˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€.
      • 이 λ³€ν™˜ 과정은 μ„±λŠ₯ μ΅œμ ν™”μ™€ μ‹€ν–‰ νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•œ μ€‘μš”ν•œ λ‹¨κ³„μž…λ‹ˆλ‹€.
    • 링크: The Art of Computer Programming on Amazon