JVM

JVM ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

JVM์˜ ๋™์ž‘ ๋ฐฉ์‹

img_13.png

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

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

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

  3. Class Loader๋Š” ๋™์  ๋กœ๋”ฉ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉ ๋ฐ ๋งํฌ ํ•˜์—ฌ Runtime Data Area(์‹ค์งˆ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ)์— ์˜ฌ๋ฆฐ๋‹ค.

  4. Runtime Data Area์— ๋กœ๋”ฉ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” Execution Engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.

  5. ์ด ๊ณผ์ •์—์„œ Execution Engine์— ์˜ํ•ด ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ์˜ ์ž‘๋™๊ณผ ์“ฐ๋ ˆ๋“œ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

JVM ๊ตฌ์กฐ ์š”์•ฝ

  • JVM์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ์˜ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋‹ค.

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

    • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ์ฝ์–ด์™€์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • ๋ฉ”์„œ๋“œ ์˜์—ญ(Method Area)

    • ํด๋ž˜์Šค ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

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

    • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

  • ์Šคํƒ ์˜์—ญ(Stack Area)

    • ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ์˜ ์‹คํ–‰ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

  • PC ๋ ˆ์ง€์Šคํ„ฐ(Program Counter Register)

    • ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.

  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ(Native Method Stack)

    • JVM์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์ด๋‹ค.

JVM ๊ตฌ์กฐ ์ƒ์„ธ

img_14.png

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

img_15.png
  • ํด๋ž˜์Šค ๋กœ๋”๋Š” JVM ๋‚ด๋กœ ํด๋ž˜์Šค ํŒŒ์ผ(*.class)์„ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์ฆ‰, ๋กœ๋“œ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋“ค์„ ์—ฎ์–ด์„œ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Runtime Data Areas์— ๋ฐฐ์น˜ํ•œ๋‹ค.

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

ํด๋ž˜์Šค ํŒŒ์ผ ๋กœ๋”ฉ ์ˆœ์„œ

img_16.png
  1. Loading(๋กœ๋“œ) : ํด๋ž˜์Šค ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

  2. Linking(๋งํฌ) : ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •

    1. Verifying(๊ฒ€์ฆ) : ์ฝ์–ด๋“ค์ธ ํด๋ž˜์Šค๊ฐ€ JVM ๋ช…์„ธ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ

    2. Preparing(์ค€๋น„) : ํด๋ž˜์Šค๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น

    3. Resolving(๋ถ„์„) : ํด๋ž˜์Šค์˜ ์ƒ์ˆ˜ ํ’€ ๋‚ด ๋ชจ๋“  ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋‹ค์ด๋ ‰ํŠธ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๋ณ€๊ฒฝ

  3. Initialization(์ดˆ๊ธฐํ™”) : ํด๋ž˜์Šค ๋ณ€์ˆ˜๋“ค์„ ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”(static ํ•„๋“œ๋“ค์„ ์„ค์ •๋œ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”, int = 0 ๋“ฑ)

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

  • ์‹คํ–‰ ์—”์ง„์€ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค.

  • ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(*.class)๋Š” ๊ธฐ๊ณ„๊ฐ€ ๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ณด๋‹ค๋Š” JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ๋ ˆ๋ฒจ๋กœ ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์‹คํ–‰ ์—”์ง„์€ ์ด์™€ ๊ฐ™์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ JVM ๋‚ด๋ถ€์—์„œ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

  • ์ด ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ์‹คํ–‰ ์—”์ง„์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

img_17.png

์ธํ„ฐํ”„๋ฆฌํ„ฐ

  • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ๋ฐ”๋กœ ์‹คํ–‰ํ•œ๋‹ค.

  • JVM ์•ˆ์—์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

  • ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ผ๋„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ ๋˜๋ฉด ๋งค๋ฒˆ ํ•ด์„ํ•˜๊ณ  ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์€ ์†๋„๋Š” ๋А๋ฆฌ๋‹ค.

JIT ์ปดํŒŒ์ผ๋Ÿฌ

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๋ฐฉ์‹์ด๋‹ค.

  • ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ Native Code๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„์—๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋” ์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ  ์บ์‹ฑํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ํ•˜๋‚˜์”ฉ ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜์—ฌ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ , ์ปดํŒŒ์ผ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

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

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ

  • JVM์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•ด์ค€๋‹ค.

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ (Runtime Data Area)

img_18.png
  • ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์€ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ ์žฌํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

img_19.png

Method Area, Heap Area๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๊ณ , ๋‚˜๋จธ์ง€ Stack Area, PC Register, Native Method Stack์€ ๊ฐ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ฐœ๋ณ„ ์˜์—ญ์ด๋‹ค.

img_20.png

๋ฉ”์„œ๋“œ ์˜์—ญ (Method Area)

  • Class Area๋‚˜ Static Area ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.

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

  • JVM์ด ๋™์ž‘ํ•˜๊ณ  ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์ ์žฌ๋˜์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ €์žฅ๋œ๋‹ค.

  • ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ์ •๋ณด๋“ค์ด ์ €์žฅ๋œ๋‹ค.

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

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

    • Type Info : Class ์ธ์ง€ Interface ์ธ์ง€ ์—ฌ๋ถ€ ์ €์žฅ, Type์˜ ์†์„ฑ, ์ด๋ฆ„, Super Class์˜ ์ด๋ฆ„

  • ์ •์  ํ•„๋“œ์™€ ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

img_21.png

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

  • ํž™ ์˜์—ญ์€ ๋ฉ”์„œ๋“œ ์˜์—ญ๊ณผ ํ•จ๊ป˜ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋ฉฐ, JVM์ด ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ์‹œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

  • new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋˜๋Š” ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ๋ฐฐ์—ด ํƒ€์ž… ๋“ฑ ์ฐธ์กฐํ˜•(Reference Type)์ด ์ €์žฅ๋˜๋Š” ๊ณณ์ด๋‹ค.

img_22.png
  • ์œ ์˜ํ•  ์ ์€, ํž™ ์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด ๋“ฑ์€ Reference Type์œผ๋กœ์„œ, JVM ์Šคํƒ ์˜์—ญ์˜ ๋ณ€์ˆ˜๋‚˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํ•„๋“œ์—์„œ ์ฐธ์กฐ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.

  • ์ฆ‰, ํž™์˜ ์ฐธ์กฐ ์ฃผ์†Œ๋Š” ์Šคํƒ์ด ๊ฐ–๊ณ  ์žˆ๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํž™ ์˜์—ญ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

img_23.png
  • ํž™์˜ ๊ฐ์ฒด๋Š” ์Šคํƒ์˜ ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

  • ๋งŒ์•ฝ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜ ํ•„๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์˜๋ฏธ์—†๋Š” ๊ฐ์ฒด๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์“ฐ๋ ˆ๊ธฐ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  JVM์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์‹คํ–‰์‹œ์ผœ ์“ฐ๋ ˆ๊ธฐ ๊ฐ์ฒด๋ฅผ ํž™ ์˜์—ญ์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•œ๋‹ค.

  • ์ด์ฒ˜๋Ÿผ ํž™ ์˜์—ญ์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ๋Œ€์ƒ์ด ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

์Šคํƒ ์˜์—ญ (Stack Area)

  • ์Šคํƒ ์˜์—ญ์€ int, long, boolean ๋“ฑ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ์ƒ์„ฑํ•  ๋•Œ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, ์ž„์‹œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜๋‚˜ ์ •๋ณด๋“ค์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.

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

  • ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์„œ๋“œ ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด ํ”„๋ ˆ์ž„๋ณ„๋กœ ์‚ญ์ œ๋œ๋‹ค.

  • ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ์Šคํƒ๊ณผ ํž™์— ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

    • ๊ธฐ๋ณธ(์›์‹œ) ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ์Šคํƒ ์˜์—ญ์— ์ง์ ‘ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

    • ์ฐธ์กฐํƒ€์ž… ๋ณ€์ˆ˜๋Š” ํž™ ์˜์—ญ์ด๋‚˜ ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ๊ฐ์ฒด ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค.

img_25.png
  • new ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํด๋ž˜์Šค๋Š” Heap Area์— ์ €์žฅ๋˜๊ณ , Stack Area์—๋Š” ์ƒ์„ฑ๋œ ํด๋ž˜์Šค์˜ ์ฐธ์กฐ์ธ p๋งŒ ์ €์žฅ๋œ๋‹ค.

  • ์Šคํƒ ์˜์—ญ์€ ๊ฐ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ• ๋‹น๋œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ ์Šคํƒ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด, ๋Ÿฐํƒ€์ž„ ์‹œ์— ์Šคํƒ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜๋Š” ์—†๋‹ค.

  • ๋งŒ์•ฝ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ JVM ์Šคํƒ์—์„œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด StackOverFlowError๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์“ฐ๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์Šคํƒ๋„ ์‚ฌ๋ผ์ง„๋‹ค.

img_26.png
img_27.png

PC ๋ ˆ์ง€์Šคํ„ฐ (Program Counter Register)

  • PC ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ, ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ JVM ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

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

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์€ CPU์—์„œ ๋ช…๋ น์–ด(Instruction)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  • ์ด๋–„ CPU๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ(Register) ๋ผ๊ณ  ํ•˜๋Š” CPU ๋‚ด์˜ ๊ธฐ์–ต์žฅ์น˜๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ž๋ฐ”์˜ PC Register๋Š” CPU Register์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

  • ์ž๋ฐ”๋Š” OS๋‚˜ CPU์˜ ์ž…์žฅ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— JVM์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • ๊ทธ๋ž˜์„œ ์ž๋ฐ”๋Š” CPU์— ์ง์ ‘ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ˜„์žฌ ์ž‘์—…ํ•˜๋Š” ๋‚ด์šฉ์„ CPU์—๊ฒŒ ์—ฐ์‚ฐ์œผ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•œ ๋ฒ„ํผ ๊ณต๊ฐ„์œผ๋กœ PC Register๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ JVM์€ ์Šคํƒ์—์„œ ๋น„์—ฐ์‚ฐ๊ฐ’ Operand๋ฅผ ๋ฝ‘์•„ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ธ PC Register์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์ทจํ•œ๋‹ค.

img_28.png
  • ๋งŒ์•ฝ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ž๋ฐ” ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉด JVM ๋ช…๋ น(Instruction)์˜ ์ฃผ์†Œ๋ฅผ PC Register์— ์ €์žฅํ•œ๋‹ค.

  • ๊ทธ๋Ÿฌ๋‹ค ์ž๋ฐ”๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด(C์–ธ์–ด, ์–ด์…ˆ๋ธ”๋ฆฌ)์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, undefined ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

  • ์™œ๋ƒํ•˜๋ฉด ์ž๋ฐ”์—์„œ๋Š” ์ด ๋‘ ๊ฒฝ์šฐ๋ฅผ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

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

  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ์€ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ ๋˜์–ด ์ƒ์„ฑ๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค.

  • ๋˜ํ•œ ์ž๋ฐ” ์ด์™ธ์˜ ์–ธ์–ด(C, C++, ์–ด์…ˆ๋ธ”๋ฆฌ ๋“ฑ)๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ด๊ธฐ๋„ ํ•˜๋‹ค.

  • JIT ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋œ Native Code ์—ญ์‹œ ์—ฌ๊ธฐ์—์„œ ์‹คํ–‰ ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

img_29.png
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ JVM ์Šคํƒ์— ์Œ“์ด๋‹ค๊ฐ€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์— ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ์— ์Œ“์ธ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ์ž๋ฐ” ์Šคํƒ์œผ๋กœ ๋Œ์•„์™€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ๊ทธ๋ž˜์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ๋„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

JNI (Native Method Interface)

  • JVM์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ์ค‘ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์ผ์ข…์˜ ํ”„๋ ˆ์ž„์›Œํฌ

  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ผฌ๋ฆฌ ์งˆ๋ฌธ - JVM ํŠœ๋‹์€ ์–ด๋–ค ์‹์œผ๋กœ ์ง„ํ–‰๋˜๋‚˜์š”?

JVM ํŠœ๋‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉฐ ์ง„ํ–‰๋œ๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ„์„

    • JVM์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ƒํƒœ ๋ถ„์„

  2. ๋ฉ”๋ชจ๋ฆฌ ํŠœ๋‹

    • JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์„ฑ ์ตœ์ ํ™”, GC ์„ค์ • ๋“ฑ

  3. ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ JVM ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

  4. ํŠœ๋‹ ํ‰๊ฐ€

    • ์ˆ˜์ •ํ•œ JVM ํŠœ๋‹ ์„ค์ •์˜ ํšจ๊ณผ ํ‰๊ฐ€

  5. ์ˆ˜์ • ๋ฐ˜๋ณต

    • ํšจ๊ณผ๊ฐ€ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ ์ข…๋ฃŒ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 2๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ฐ˜๋ณต

๋งˆ์ง€๋ง‰ 5๋ฒˆ, ์ˆ˜์ • ๋ฐ˜๋ณต์ด ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค. ๊ณ„์†ํ•ด์„œ ํ”ผ๋“œ๋ฐฑ์„ ์ ์šฉ์‹œํ‚ค๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

์ฐธ๊ณ 

Last updated