[Java] JVM ์ด๋ž€?

Jeiniยท2025๋…„ 9์›” 4์ผ
0

โ˜•๏ธย  Java

๋ชฉ๋ก ๋ณด๊ธฐ
59/70
post-thumbnail

๐Ÿ–ฅ๏ธ Java ์‹คํ–‰ ๊ณผ์ •


โ˜• JVM (Java Virtual Machine)์ด๋ž€?

๐Ÿ‘‰ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ
์ฆ‰, ์ปดํ“จํ„ฐ(์œˆ๋„์šฐ, ๋งฅ, ๋ฆฌ๋ˆ…์Šค)๊ฐ€ ๋‹ค ๋‹ฌ๋ผ๋„, JVM ์œ„์—์„œ๋ผ๋ฉด ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ๋˜‘๊ฐ™์ด ์‹คํ–‰๋œ๋‹ค.

โžก๏ธ ๊ทธ๋ž˜์„œ ์ž๋ฐ”์˜ ์œ ๋ช…ํ•œ ์Šฌ๋กœ๊ฑด
"Write Once, Run Anywhere" (ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋””์„œ๋“  ์‹คํ–‰)
์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฒŒ ๋ฐ”๋กœ JVM ๋•๋ถ„์ด๋‹ค! ๐ŸŽ‰


๐Ÿ›  JVM์ด ํ•˜๋Š” ์ผ ๊ฐ„๋‹จ ๋ฒ„์ „

1. ์ฝ”๋“œ ์ปดํŒŒ์ผ

  • .java โ†’ javac โ†’ .class (๋ฐ”์ดํŠธ์ฝ”๋“œ) ๋ณ€ํ™˜

    โ—๏ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ: JVM๋งŒ ์•Œ์•„๋“ฃ๋Š” ์ค‘๊ฐ„ ์–ธ์–ด

2. ํด๋ž˜์Šค ๋กœ๋”ฉ (Class Loader)

  • ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ์—ญํ• 
  • .class ํŒŒ์ผ์„ JVM ์•ˆ์œผ๋กœ ๊ฐ€์ ธ์˜ด
  • ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ
  • ๋™์  ๋กœ๋”ฉ ๋ฐฉ์‹์ด๋ผ, ์ฒ˜์Œ๋ถ€ํ„ฐ ์ „๋ถ€ ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ  ํ•„์š”ํ•  ๋•Œ ๊ทธ๋•Œ๊ทธ๋•Œ ๋ถˆ๋Ÿฌ์˜ด.

โ—๏ธClassLoader ์„ธ ๋‹จ๊ณ„

  • Loading
    - .class ํŒŒ์ผ์„ ์ฝ์–ด์„œ JVM ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ (Method Area).
  • Linking
    - (๊ฒ€์ฆ) ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ JVM ๊ทœ์น™ ์œ„๋ฐ˜ ์—†๋Š”์ง€ ์ฒดํฌ
    - (์ค€๋น„) static ๋ณ€์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น, ๊ธฐ๋ณธ๊ฐ’ ์„ธํŒ…
    - (ํ•ด๊ฒฐ) ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ ์—ฐ๊ฒฐ
  • Initialization
    - static ๋ณ€์ˆ˜ ์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น
    - static ๋ธ”๋ก ์‹คํ–‰

3. ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜ (Runtime Data Area)

JVM์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒŒ 5์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ”:

  • Method Area: ํด๋ž˜์Šค ์ •๋ณด, static ๋ณ€์ˆ˜
  • Heap: new ๋กœ ๋งŒ๋“  ๊ฐ์ฒด/๋ฐฐ์—ด
  • Stack: ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜
  • PC Register: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด ์œ„์น˜
  • Native Method Stack: C ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์‹คํ–‰

4. ์‹คํ–‰ ์—”์ง„ (Execution Engine)

  • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹ค์ œ CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—”์ง„
  • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ๊ณ  ์‹คํ–‰ (์ธํ„ฐํ”„๋ฆฌํ„ฐ)
  • ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๋กœ โ†’ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์„œ ์†๋„ ์—…

โ—๏ธ Interpreter

  • ํ•œ ์ค„์”ฉ(๋ฐ”์ดํŠธ์ฝ”๋“œ ๋‹จ์œ„) ํ•ด์„ํ•ด์„œ ์‹คํ–‰
  • ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์—์„  ๋А๋ ค์ง

โ—๏ธ JIT(Just-In-Time) Compiler

  • ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ(Hotspot)๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์บ์‹ฑ
  • ์ดํ›„๋ถ€ํ„ฐ๋Š” ๊ธฐ๊ณ„์–ด๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋‹ˆ๊นŒ ํ›จ์”ฌ ๋น ๋ฆ„ ๐Ÿš€
  • JVM์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ + JIT ํ˜ผํ•ฉ์œผ๋กœ ๋™์ž‘ํ•จ

5. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (GC)

  • ๋” ์ด์ƒ ์“ฐ์ด์ง€ ์•Š๋Š” ๊ฐ์ฒด(Heap์— ์žˆ๋Š” ์• ๋“ค) ์ฐพ์•„์„œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜

โธ๏ธ STOP-THE-WORLD ํ˜„์ƒ
: JVM์—์„œ GC(Garbage Collector) ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ

  • GC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ฒญ์†Œํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์ž ์‹œ ๋ฉˆ์ถฐ์•ผ ํ•จ
  • ์ด๋•Œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”๊ณ , GC๋งŒ ๋™์ž‘ โ†’ โ€œStop-The-Worldโ€
  • ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์„œ๋น„์Šค ์ง€์—ฐ, ๋Š๊น€ ๊ฐ™์€ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ๊ทธ๋ž˜์„œ ์ตœ์‹  GC๋“ค์€ (G1, ZGC, Shenandoah ๋“ฑ) ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐœ์ „ํ•จ

๐ŸŽฌ ์˜ํ™”๊ด€ ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ

.java ์ฝ”๋“œ โ†’ ์˜ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค
javac ์ปดํŒŒ์ผ๋Ÿฌ โ†’ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์˜์–ด(๋ฐ”์ดํŠธ์ฝ”๋“œ)๋กœ ๋ฒˆ์—ญ
JVM โ†’ ํ†ต์—ญ์‚ฌ

  • ํด๋ž˜์Šค ๋กœ๋”: ์˜ํ™”์— ํ•„์š”ํ•œ ๋ฐฐ์šฐ๋“ค(ํด๋ž˜์Šค) ๋ฌด๋Œ€ ์œ„๋กœ ์˜ฌ๋ฆผ
  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ: ๋ฐฐ์šฐ๋“ค์ด ์—ฐ๊ธฐํ•  ๊ณต๊ฐ„ ๋‚˜๋ˆ” (๋ฌด๋Œ€, ๋Œ€๊ธฐ์‹ค ๋“ฑ)
  • ์‹คํ–‰ ์—”์ง„: ๋Œ€๋ณธ ์ฝ๊ณ  ๋ฐ”๋กœ ํ†ต์—ญ or ์ž์ฃผ ์“ฐ์ด๋Š” ๋Œ€์‚ฌ๋Š” ๋ฏธ๋ฆฌ ์™ธ์›Œ๋‘  (JIT)
  • GC: ์•ˆ ์“ฐ๋Š” ์†Œํ’ˆ(๊ฐ์ฒด) ์น˜์šฐ๋Š” ๋ฌด๋Œ€ ๊ด€๋ฆฌ์ž

โœ… ์ •๋ฆฌ

  • JVM์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ฐ€์ƒ ๊ธฐ๊ณ„
  • "ํด๋ž˜์Šค ๋กœ๋”ฉ โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜ โ†’ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰ โ†’ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜" ํ๋ฆ„์œผ๋กœ ๋™์ž‘
  • ๋•๋ถ„์— ์ž๋ฐ”๋Š” "ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋””์„œ๋“  ์‹คํ–‰(Write Once, Run Anywhere)" ๊ฐ€๋Šฅ

https://supercoding.notion.site/_DAY1_-_-889893edfcec47ff8e34d08482f33238

profile
Fill in my own colorful colors๐ŸŽจ

0๊ฐœ์˜ ๋Œ“๊ธ€