Skip to content

Latest commit

ย 

History

History
162 lines (76 loc) ยท 9.94 KB

JVM.md

File metadata and controls

162 lines (76 loc) ยท 9.94 KB

JVM

[TOC]

JVM์ด๋ž€?

JVM์ด๋ž€ JAVA Virtual Machine, ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์•ฝ์ž๋ฅผ ๋”ฐ์„œ ์ค„์—ฌ ๋ถ€๋ฅด๋Š” ์šฉ์–ด๋‹ค.

๊ฐ€์ƒ๋จธ์‹  : ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌผ๋ฆฌ์  ๋จธ์‹ ๊ณผ ์œ ์‚ฌํ•œ ๋จธ์‹ ์„ ์†ŒํŠธํ”„์›จ์–ด๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

JVM ์—ญํ• ์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ์–ด ๋“ค์—ฌ ์ž๋ฐ” API์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  JVM์€ JAVA์™€ OS์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ JAVA๊ฐ€ OS์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ, Garbage collection์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  JVM์€ ์Šคํƒ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ๋จธ์‹ ์ด๋‹ค. ARM ์•„ํ‚คํ…์ฒ˜ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด๋Š” ๋ ˆ์ง€์Šคํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ ๋น„ํ•ด JVM์€ ์Šคํƒ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

Java ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •

  1. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.

  2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ(.java)๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

  3. Class Loader๋ฅผ ํ†ตํ•ด classํŒŒ์ผ๋“ค์„ JVM์œผ๋กœ ๋กœ๋”ฉํ•œ๋‹ค.

  4. ๋กœ๋”ฉ๋œ classํŒŒ์ผ๋“ค์€ Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.

  5. ํ•ด์„๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” Runtime Data Areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์€ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

    ์ด๋Ÿฌํ•œ ์‹คํ–‰๊ณผ์ • ์†์—์„œ JVM์€ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ GC๊ฐ™์€ ๊ด€๋ฆฌ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

img

JVM ๊ตฌ์„ฑ

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

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

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

ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• ์ด๋‹ค. ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ JVM๋‚ด์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฐฐ์น˜์‹œํ‚ค๊ณ , ์ด๊ฒƒ์€ ์‹คํ–‰์—”์ง„์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค. ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„๊ฐ€ ๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ณด๋‹ค๋Š” ๋น„๊ต์  ์ธ๊ฐ„์ด ๋ณด๊ธฐ ํŽธํ•œ ํ˜•ํƒœ๋กœ ๊ธฐ์ˆ ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‹คํ–‰ ์—”์ง„์€ ์ด์™€ ๊ฐ™์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ JVM๋‚ด๋ถ€์—์„œ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด ๋•Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)

์‹คํ–‰ ์—”์ง„์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์— ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์˜ ๋‹จ์ ์„ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ณ ์žˆ๋‹ค. ํ•œ ์ค„์”ฉ ์‹คํ–‰ํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋Š๋ฆฌ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

JIT(Just In Time)

Java 17์—์„œ ์‚ญ์ œ๋˜์—ˆ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ JIT ์ปดํŒŒ์ผ๋Ÿฌ์ด๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„์—๋Š” ๋” ์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฌผ๋ก  JIT์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฏ€๋กœ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ผ๋ฉด ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜๋Š”๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค. ๋”ฐ๋ผ์„œ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JVM๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์ฒดํฌํ•˜๊ณ , ์ผ์ • ์ •๋„๋ฅผ ๋„˜์„ ๋•Œ์—๋งŒ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Garbage collector

GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ(์“ฐ๋ ˆ๋“œ)์ด ์žˆ๋‹ค.

Runtime Data Area

img

ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS์—์„œ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.

PC Register(Program Counter Register)

์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•œ๋‹ค.

์“ฐ๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ์–ด๋–ค ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•ด์•ผํ•  ์ง€์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ JVM ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

JVM ์Šคํƒ ์˜์—ญ

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •์—์„œ ์ž„์‹œ๋กœ ํ• ๋‹น๋˜์—ˆ๋‹ค๊ฐ€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ๋ฐ”๋กœ ์†Œ๋ฉธ๋˜๋Š” ํŠน์„ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์˜์—ญ์ด๋‹ค. ๊ฐ์ข… ํ˜•ํƒœ์˜ ๋ณ€์ˆ˜๋‚˜ ์ž„์‹œ ๋ฐ์ดํ„ฐ, ์Šค๋ ˆ๋“œ๋‚˜ ๋ฉ”์†Œ๋“œ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋œ๋‹ค. ์Šคํƒ ํ”„๋ ˆ์ž„์€ ๊ทธ ๋ฉ”์†Œ๋“œ๋งŒ์„ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋‹ค.

๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด ํ”„๋ ˆ์ž„๋ณ„๋กœ ์‚ญ์ œ๋ฅผ ํ•œ๋‹ค. ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค(local variable, ์ง€์—ญ๋ณ€์ˆ˜)์„ ์ €์žฅํ•œ๋‹ค. ๋˜ ํ˜ธ์ถœ๋œ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ๋ฆฌํ„ด ๊ฐ’ ๋ฐ ์—ฐ์‚ฐ ์‹œ ์ผ์–ด๋‚˜๋Š” ๊ฐ’๋“ค์„ ์ž„์‹œ๋กœ ์ €์žฅํ•œ๋‹ค.

Stack Frame ์˜์—ญ
  1. Local Variable Section

    Local Variable Section์€ Method์˜ Parameter Value์™€ Local Variable์„ ์ €์žฅํ•œ๋‹ค.

  2. Operand Stack

    Operand Stack์€ JVM์˜ ์ž‘์—…๊ณค๊ฐ„์ด๋‹ค. JVM์ด ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์™€ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ Operand Stack์— ๋„ฃ๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  3. Frame Data

    Stack Frame์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ์˜์—ญ, Constant Pool Resolution ์ •๋ณด์™€ method๊ฐ€ ์ •์ƒ ์ข…๋ฃŒํ–ˆ์„ ๋•Œ์˜ ์ •๋ณด ๋˜๋Š” ๋น„์ •์ƒ ์ข…๋ฃŒ๋ฅผ ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” Exception ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ ์Šคํƒ(Native method stack)

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋˜์–ด ์ƒ์„ฑ๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค. JAVA๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋‹ค. JAVA Native Interface๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ปค๋„์ด ์Šคํƒ์„ ์žก์•„ ๋…์ž์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค.

๋ฉ”์†Œ๋“œ ์˜์—ญ(Method Area, Class Area, Static Area)

ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์ฒ˜์Œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์˜ฌ๋ฆด ๋•Œ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋Œ€์ƒ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„. ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ์ด๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ main ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ์—์„œ๋ถ€ํ„ฐ ๊ณ„์†๋œ ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ๋กœ ํ๋ฆ„์„ ์ด์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๋„ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๋ช…๋ นํ•˜๊ณ  ํ˜ธ์ถœํ•œ๋‹ค. ์‚ฌ์‹ค์ƒ ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ๋Œ€๋ถ€๋ถ„์ด ๋ฉ”์†Œ๋“œ ๋ฐ”์ดํŠธ์ฝ”๋“œ์ด๊ธฐ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค๊ณ  ๋ด๋„ ์ƒ๊ด€์—†๋‹ค. ์ด ๊ณต๊ฐ„์—๋Š” ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€(Runtime Constant Pool)์ด๋ผ๋Š” ๋ณ„๋„์˜ ๊ด€๋ฆฌ ์˜์—ญ๋„ ํ•จ๊ป˜ ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ์ƒ์ˆ˜ ์ž๋ฃŒํ˜•์„ ์ €์žฅํ•˜์—ฌ ์ฐธ์กฐํ•˜๊ณ  ์ค‘๋ณต์„ ๋ง‰๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Constant Pool

Constant Pool์€ JVM์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณณ์ด๊ณ , ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์ด๊ธฐ๋„ ํ•˜๋‹ค. Constant Pool์—๋Š” Literal Constant๋Š” ๋ฌผ๋ก ์ด๊ณ  Field(Member Variable, Class Variable), Method๋กœ์˜ ๋ชจ๋“  Symbolic Reference๊นŒ์ง€ ๊ฐ€์ง„๋‹ค. Symbolic Reference์˜ ์—ญํ• ์„ ํ•˜๋Š” ๊ณณ์ด Constant Pool์ด๋‹ค.

๋ฆฌํ„ฐ๋Ÿด ์ƒ์ˆ˜(Literal Constant) : ๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜ ์•ˆ์˜ ๊ฐ’

์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค(Symbolic Reference) : ์ฐธ๊ณ ํ•˜๋Š” ํด๋ž˜์Šค์˜ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ ๊ด€๊ณ„๋กœ ๊ตฌ์„ฑํ•œ ๊ฒƒ์ด ์•„๋‹Œ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์ƒ์˜ ์ด๋ฆ„๋งŒ์„ ์ง€์ •ํ•œ ๊ฒƒ

์˜ฌ๋ผ๊ฐ€๋Š” ์ •๋ณด์˜ ์ข…๋ฅ˜
  1. ํ•„๋“œ ์ •๋ณด(Field Information)

    ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ํ…Œ์ดํ„ฐ ํƒ€์ž…, ์ ‘๊ทผ ์ œ์–ด์ž์— ๋Œ€ํ•œ ์ •๋ณด

  2. ๋ฉ”์†Œ๋“œ ์ •๋ณด(Method Information)

    ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„, ๋ฆฌํ„ดํƒ€์ž…, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ ‘๊ทผ์ œ์–ด์ž์— ๋Œ€ํ•œ ์ •๋ณด

  3. ํƒ€์ž… ์ •๋ณด(Type Information)

    class์ธ์ง€ interface์ธ์ง€์˜ ์—ฌ๋ถ€ ์ €์žฅ / Type์˜ ์†์„ฑ, ์ „์ฒด ์ด๋ฆ„, super class์˜ ์ „์ฒด ์ด๋ฆ„(interface ๋˜๋Š” object์ธ ๊ฒฝ์šฐ ์ œ์™ธ)

๋ฉ”์†Œ๋“œ ์˜์—ญ์€ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„.

GC์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค.

ํž™ ์˜์—ญ(Heap)

img

๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค. new์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์ €์žฅํ•œ๋‹ค. ๋ฌผ๋ก  ํด๋ž˜์Šค ์˜์—ญ์— ์˜ฌ๋ผ์˜จ ํด๋ž˜์Šค๋“ค๋งŒ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํž™์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์˜๊ตฌ ์„ธ๋Œ€(Permanent Generation)

์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์˜ ์ •๋ณด์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์ด๋‹ค. Class loader์— ์˜ํ•ด load๋˜๋Š” Class, Method ๋“ฑ์— ๋Œ€ํ•œ Meta ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๊ณ , JVM์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. Reflection์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ Reflection ๊ธฐ๋Šฅ์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Spring Framework๋ฅผ ์ด์šฉํ• ๊ฒฝ์šฐ ์ด ์˜์—ญ์— ๋Œ€ํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

JDK 8์—์„œ ์ด ์˜์—ญ์€ ์‚ญ์ œ๋˜์—ˆ๋‹ค.

New/Young ์˜์—ญ
  • Eden : ๊ฐ์ฒด๋“ค์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„
  • Survivor 0 / 1 : Eden์—์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
Old ์˜์—ญ

New ์˜์—ญ์—์„œ ์ผ์ • ์‹œ๊ฐ„ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”, ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„.

Eden์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋“ํ•˜๊ฒŒ๋˜๋ฉด ์ฒซ๋ฒˆ์งธ GC(minor GC)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. Eden์˜์—ญ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ Survivor 1 ์˜์—ญ์— ๋ณต์‚ฌํ•˜๊ณ  ์ด ์˜์—ญ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

ํž™ ์˜์—ญ์€ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„.

GC์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค.

์ธ์Šคํ„ด์Šค๋Š” ์†Œ๋ฉธ ๋ฐฉ๋ฒ•๊ณผ ์†Œ๋ฉธ ์‹œ์ ์ด ์ง€์—ญ ๋ณ€์ˆ˜์™€๋Š” ๋‹ค๋ฅด๊ธฐ์— ํž™์ด๋ผ๋„ ๋ณ„๋„์˜ ์˜์—ญ์— ํ• ๋‹ค์˜ค๋”˜๋‹ค. ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์€ ๋งค์šฐ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค. ๋”์ด์ƒ ์ธ์Šคํ„ด์Šค์˜ ์กด์žฌ ์ด์œ ๊ฐ€ ์—†์„ ๋•Œ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค.