[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐ŸŽ…๋ฌด๋ฏผ์˜ JVM Stack & Heap

Meustarยท2025๋…„ 12์›” 15์ผ

์ถœ์ฒ˜ : https://www.youtube.com/watch?v=UzaGOXKVhwU

movie

์ถœ์ฒ˜: https://lilys.ai/digest/7250866/7790564/

๋งŒ์•ฝ ์ž๋ฐ”(Java)๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” '์ด์‹์„ฑ ์ง€์˜ฅ'์— ๊ฐ‡ํ˜€ ์ปดํ“จํ„ฐ ์ข…๋ฅ˜๋งˆ๋‹ค ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์„ ๊ฒ๋‹ˆ๋‹ค. JVM(์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ )์€ ์šด์˜์ฒด์ œ๋‚˜ CPU ์ข…๋ฅ˜์™€ ์ƒ๊ด€์—†์ด ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์–ด๋””์„œ๋“  ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋งˆ๋ฒ•์˜ ํ†ต์—ญ์‚ฌ์ด์ž ์‹คํ–‰ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค . ํŠนํžˆ JVM ๋‚ด๋ถ€์˜ ์Šคํƒ(Stack)๊ณผ ํž™(Heap)์€ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆฌ๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ๊ณต๊ฐ„์ธ๋ฐ, ์Šคํƒ์€ ์ž„์‹œ ์ž‘์—… ๊ณต๊ฐ„์ฒ˜๋Ÿผ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์กด์žฌํ•˜๋ฉฐ ์‹คํ–‰ ์ค‘์ธ ๋ฉ”์†Œ๋“œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํž™์€ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๊ณต์œ ํ•˜๋Š” ์˜๊ตฌ์ ์ธ ์ฐฝ๊ณ  ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค .

1. JVM, ์™œ ํ•„์š”ํ•œ๊ฐ€์š”? ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ์ด๋ผ๋Š” ๋งˆ๋ฒ•

  • C๋‚˜ C++ ๊ฐ™์€ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ๋ถ€ํ„ฐ ํŠน์ • ์ปดํ“จํ„ฐ(ํ”Œ๋žซํผ)์— ๋งž์ถฐ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋Š” ๊นŒ๋‹ค๋กœ์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค .
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฆฌ๋ˆ…์Šค์—์„œ ๋งŒ๋“  ์‹คํ–‰ ํŒŒ์ผ์„ ์œˆ๋„์šฐ์—์„œ ๋Œ๋ฆฌ๋ฉด ์ ˆ๋Œ€ ์ž‘๋™ํ•˜์ง€ ์•Š์ฃ  .
    • ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์œˆ๋„์šฐ๋ฅผ ํƒ€๊ฒŸ์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๊ฑธ ํฌ๋กœ์Šค ์ปดํŒŒ์ผ(Cross-compile)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค .
  • JVM์€ ์ด ๋ฌธ์ œ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋Š”๋ฐ, ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)๊ฐ€ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(Byte Code)๋ผ๋Š” ์ค‘๊ฐ„ ์–ธ์–ด๋กœ ๋ฐ”๊พธ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค .
  • ์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ํŠน์ • OS๋‚˜ CPU์— ์ข…์†๋˜์ง€ ์•Š๊ณ , JVM๋งŒ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋“  ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต์–ด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค .

2. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• : ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ ๋ถ„๋ฆฌ

  • ์ผ๋ฐ˜์ ์ธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ (ํ”„๋ก ํŠธ์—”๋“œ), ๊ทธ๊ฒƒ์„ ์‹ค์ œ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ๋Š” ์ผ(๋ฐฑ์—”๋“œ)์„ ๋ชจ๋‘ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค .
    • ํ”„๋ก ํŠธ์—”๋“œ๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ ํ”Œ๋žซํผ์ด ๋ฐ”๋€Œ์–ด๋„ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์•„์š” .
    • ํ•˜์ง€๋งŒ ๋ฐฑ์—”๋“œ๋Š” ์šด์˜์ฒด์ œ๋‚˜ ๊ธฐ๊ณ„์–ด์— ์˜์กด์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œˆ๋„์šฐ์šฉ, ๋ฆฌ๋ˆ…์Šค์šฉ ๋“ฑ ์ข…๋ฅ˜๋ณ„๋กœ ๋‹ฌ๋ผ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค .
  • ์ž๋ฐ”๋Š” ์ด ์—ญํ• ์„ ๋ถ„๋ฆฌํ–ˆ๋Š”๋ฐ, JavaC(์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ)๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ ์—ญํ• ์„ ๋งก์•„ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  .
    • JVM(์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ )์ด ๋ฐฑ์—”๋“œ ์—ญํ• ์„ ๋งก์•„์„œ ์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐ ํ”Œ๋žซํผ์— ๋งž๊ฒŒ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ฒ๋‹ˆ๋‹ค .

3. JVM์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ: ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํš ๋‚˜๋ˆ„๊ธฐ

  • JVM์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ํฌ๊ฒŒ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ๊ณผ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค .
๊ตฌ๋ถ„์˜์—ญ ์ด๋ฆ„ํŠน์ง• (๋น„์œ )๊ณต์œ  ์—ฌ๋ถ€
๊ณต์œ  ์˜์—ญ๋ฉ”์†Œ๋“œ ์˜์—ญ (Method Area)ํด๋ž˜์Šค ์ •๋ณด(๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ ๊ตฌ์กฐ ๋“ฑ)๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋„์„œ๊ด€๋ชจ๋“  ์“ฐ๋ ˆ๋“œ ๊ณต์œ 
๊ณต์œ  ์˜์—ญํž™ (Heap)ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์ €์žฅํ•˜๋Š” ์ฐฝ๊ณ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ ๊ณต์œ 
๊ฐœ๋ณ„ ์˜์—ญ์Šคํƒ (Stack)๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒ๊ธฐ๋Š” ์ž„์‹œ ์ž‘์—…๋Œ€์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ๋…๋ฆฝ์ 
  • ๋ฉ”์†Œ๋“œ ์˜์—ญ์€ ํด๋ž˜์Šค ํŒŒ์ผ์ด ๋กœ๋“œ๋  ๋•Œ ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ ์ •๋ณด(๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ ์ •์˜ ๋“ฑ)๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ์ €์žฅํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค .
  • ํž™์€ ์šฐ๋ฆฌ๊ฐ€ new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋“ค์ด ๋ชจ์—ฌ ์‚ฌ๋Š” ๊ฑฐ๋Œ€ํ•œ ์•„ํŒŒํŠธ ๋‹จ์ง€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค .

4. ์“ฐ๋ ˆ๋“œ๋ณ„ ์ž‘์—… ๊ณต๊ฐ„: ์Šคํƒ๊ณผ ์Šคํƒ ํ”„๋ ˆ์ž„

  • ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ค ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์œ„์ธ ์“ฐ๋ ˆ๋“œ(Thread)๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค .
  • ์ž๋ฐ” ์Šคํƒ (Java Stack)์€ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame)์ด ์ƒ๊ฒจ๋‚ฉ๋‹ˆ๋‹ค .
    • ์Šคํƒ์€ ๋งˆ์น˜ ์ ‘์‹œ ์Œ“๊ธฐ์ฒ˜๋Ÿผ ์œ„๋กœ ์Œ“์ด๊ณ (์„ฑ์žฅํ•˜๊ณ ), ๋ฉ”์†Œ๋“œ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ํ”„๋ ˆ์ž„(์ ‘์‹œ)๋ถ€ํ„ฐ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค .
  • ์Šคํƒ ํ”„๋ ˆ์ž„์€ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ž„์‹œ ๋ฐ•์Šค์ž…๋‹ˆ๋‹ค .

5. ์Šคํƒ ํ”„๋ ˆ์ž„ ์†์˜ ์ž‘์—… ๋„๊ตฌ: ๋กœ์ปฌ ๋ณ€์ˆ˜์™€ ์˜คํผ๋žœ๋“œ ์Šคํƒ

  • ํ•˜๋‚˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„ ์•ˆ์—๋Š” ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๋ฐ ํ•„์š”ํ•œ ์ค‘์š”ํ•œ ์„ธ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค .
  • ๋กœ์ปฌ ๋ณ€์ˆ˜ ๋ฐฐ์—ด (Local Variable Array): ์šฐ๋ฆฌ๊ฐ€ ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋“ค(์˜ˆ: int a = 10;)์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค .
    • ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ "๋กœ์ปฌ ๋ณ€์ˆ˜ 1๋ฒˆ ์ธ๋ฑ์Šค์— ์ €์žฅํ•ด!"๋ผ๊ณ  ๋ช…๋ นํ•˜๋ฉด ์ด ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜์— ๊ฐ’์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค .
  • ์˜คํผ๋žœ๋“œ ์Šคํƒ (Operand Stack): ์‹ค์ œ ์—ฐ์‚ฐ์„ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ์†Œ๋กœ, CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค .
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋ ค๋ฉด ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น(dadd)์„ ํ†ตํ•ด ์ด ์Šคํƒ์—์„œ ๋‘ ๊ฐ’์„ ๊บผ๋‚ด์„œ ์—ฐ์‚ฐํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ด ์Šคํƒ์— ๋„ฃ์Šต๋‹ˆ๋‹ค .

6. JVM์ด ๋ ˆ์ง€์Šคํ„ฐ ๋Œ€์‹  ์Šคํƒ์„ ์“ฐ๋Š” ์ด์œ : ๋‹จ์ˆœํ•จ๊ณผ ์ด์‹์„ฑ

  • ์ผ๋ฐ˜์ ์ธ CPU๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ผ๋Š” ์ดˆ๊ณ ์† ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ JVM์€ ์™œ ์ด ๋ณต์žกํ•œ ์Šคํƒ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ–ˆ์„๊นŒ์š”?
  • JVM์ด ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์ด์‹์„ฑ(Portability)์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค .
    • ๋ ˆ์ง€์Šคํ„ฐ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋ฅผ ์“ฐ๋ ค๋ฉด, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ์ปดํ“จํ„ฐ์˜ CPU ๋ ˆ์ง€์Šคํ„ฐ ๊ฐœ์ˆ˜๋‚˜ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ์–ด์•ผ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .
    • ์ด๋Š” ์ž๋ฐ”๊ฐ€ ๋ชฉํ‘œ๋กœ ํ–ˆ๋˜ "์–ด๋””์„œ๋“  ๋™์ž‘"ํ•˜๋Š” ๋ฒ”์šฉ์„ฑ๊ณผ ์ •๋ฉด์œผ๋กœ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํƒ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋Š” ์‹ค์ œ ํ•˜๋“œ์›จ์–ด์˜ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ์ˆจ๊ธฐ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š”(Push/Pop) ๋‹จ์ˆœํ•œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ์‚ฐ์„ ์ถ”์ƒํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— .
    • JVM์€ ํ•˜๋“œ์›จ์–ด์˜ ์ฐจ์ด์— ์ตœ์†Œํ•œ์œผ๋กœ ๊ด€์—ฌํ•˜๋ฉด์„œ๋„ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค .
profile
์œ ํŠœ๋ธŒ ๊ธฐ์ˆ  ์˜์ƒ์„ ๋ณด๋ฉด์„œ ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด... Lilys AI๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐ๊ฒฝ์ง€์‹, ์˜์ƒ ์ „์ฒด ์š”์•ฝ ๋ฐ ํ•ต์‹ฌ ๋‚ด์šฉ ์„ค๋ช…๋“ค์„ ๋ธ”๋กœ๊น… ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑํ•œ ๋‚ด์šฉ๋“ค์— ๋Œ€ํ•ด์„œ ์–ธ์ œ๊ณ  ๋‹ค์‹œ "๋‚ด๊ฐ€" ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค!

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