๋ ˆ๊ฑฐ์‹œ

2022.02.14 (๊ฐœ๋… ์ •๋ฆฌ)

GroovyArea 2022. 2. 15. 01:35

โ–ถ ๊ฐœ์ธ ๊ณต๋ถ€ ๊ด€๋ จ

 

7. Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์˜ ๋™์ž‘ ๋ฐฉ์‹

  • Young ์˜์—ญ๊ณผ Old ์˜์—ญ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ธ๋ถ€์ ์ธ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ์˜ 2๊ฐ€์ง€ ๊ณตํ†ต์ ์ธ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค.
  1. Stop The World : JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ์ž‘์—…์ด๋‹ค. GC๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋Š” GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋œ๋‹ค. ๋‹น์—ฐํžˆ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์—, GC์˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ํŠœ๋‹์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋ณดํ†ต stop-the-world์˜ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  2. Mark and Sweep :
  • Mark: ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—…
  • Sweep: Mark ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ์‹๋ณ„๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ž‘์—…
  • Stop The World๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๋ฉด, GC๋Š” ์Šคํƒ์˜ ๋ชจ๋“  ๋ณ€์ˆ˜ ๋˜๋Š” Reachable ๊ฐ์ฒด๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ๊ฐ๊ฐ์ด ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ฐธ๊ณ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ Mark๋ผ๊ณ  ํ•œ๋‹ค. ์ดํ›„์— Mark๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ Sweep๋ผ๊ณ  ํ•œ๋‹ค.
  1. [ Minor GC์˜ ๋™์ž‘ ๋ฐฉ์‹ ]
  • Minor GC๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Young ์˜์—ญ์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ดํ•ด๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. Young ์˜์—ญ์€ 1๊ฐœ์˜ Eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ Survivor ์˜์—ญ, ์ด 3๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.
  • Eden ์˜์—ญ: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ
  • Survivor ์˜์—ญ: ์ตœ์†Œ 1๋ฒˆ์˜ GC ์ด์ƒ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์˜์—ญ
  • ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด Young ์˜์—ญ ์ค‘์—์„œ๋„ Eden ์˜์—ญ์— ํ• ๋‹น(Allocation)์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ๋˜๊ณ  Eden ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋Š” (์‚ฌ์šฉ์ค‘์ธ) Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค. Survivor ์˜์—ญ์€ ์ด 2๊ฐœ์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ 1๊ฐœ์˜ ์˜์—ญ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
  1. ๋™์ž‘ ์ˆœ์„œ
  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ Eden ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.
  • ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜์–ด Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๊ฒŒ ๋˜๊ณ  Minor GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    1. Eden ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.
    2. Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” 1๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™๋œ๋‹ค.
  • 1~2๋ฒˆ์˜ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋‹ค๊ฐ€ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด Survivor ์˜์—ญ์˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.(1๊ฐœ์˜ Survivor ์˜์—ญ์€ ๋ฐ˜๋“œ์‹œ ๋นˆ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.)
  • ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™(Promotion)๋œ๋‹ค.
  • ๊ฐ์ฒด์˜ ์ƒ์กด ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด Minor GC์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ด์•„๋‚จ์€ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” age๋ฅผ Object Header์— ๊ธฐ๋กํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Minor GC ๋•Œ Object Header์— ๊ธฐ๋ก๋œ age๋ฅผ ๋ณด๊ณ  Promotion ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๋˜ํ•œ Survivor ์˜์—ญ ์ค‘ 1๊ฐœ๋Š” ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋‘ Survivor ์˜์—ญ์— ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜, ๋ชจ๋‘ ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์•„๋‹˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ์ง„ํ–‰ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. [ Major GC์˜ ๋™์ž‘ ๋ฐฉ์‹ ]
  • Young ์˜์—ญ์—์„œ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ Promotion๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Major GC๋Š” ๊ฐ์ฒด๋“ค์ด ๊ณ„์† Promotion๋˜์–ด Old ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. Young ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Old ์˜์—ญ๋ณด๋‹ค ํฌํ‚ค๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— GC๊ฐ€ ๋ณดํ†ต 0.5์ดˆ์—์„œ 1์ดˆ ์‚ฌ์ด์— ๋๋‚œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Minor GC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ Old ์˜์—ญ์€ Young ์˜์—ญ๋ณด๋‹ค ํฌ๋ฉฐ Young ์˜์—ญ์„ ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Major GC๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Minor GC๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฉฐ, 10๋ฐฐ ์ด์ƒ์˜ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค.
  1. Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜) ๋‚ด์šฉ ์š”์•ฝ

[ Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜) ๋‚ด์šฉ ์š”์•ฝ ]

 

8. JVM์˜ ๊ตฌ์กฐ

  • ์ž๋ฐ” ์†Œ์Šค ํŒŒ์ผ์€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด์„œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ํ˜•ํƒœ์ธ ํด๋ž˜์Šค ํŒŒ์ผ์ด ๋˜๊ณ  ์ด ํด๋ž˜์Šค ํŒŒ์ผ์€ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ์ฝ์–ด๋“ค์ด๋ฉด์„œ JVM์ด ์ˆ˜ํ–‰๋œ๋‹ค.
  1. Class Loader : JVM ๋‚ด๋กœ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. Execution Engine : ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹๊ณผ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ์Œ. ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด JVM ๋‚ด์˜ Runtime Data Area์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ช…๋ ์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰
  • Interpreter ๋ฐฉ์‹ : ์ปดํŒŒ์ผ๋Ÿฌ์ฒ˜๋Ÿผ ๊ณ ๋ ˆ๋ฒจ์–ธ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด(์ €๋ ˆ๋ฒจ์–ธ์–ด)๋กœ ํ•ด์„ํ•ด์ฃผ๋Š” ๋ฒˆ์—ญ ํ”„๋กœ๊ทธ๋žจ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ˜๋ฉด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ์†Œ์Šค์ฝ”๋“œ์˜ ๊ฐ ํ–‰์„ ์—ฐ์†์ ์œผ๋กœ ๋ถ„์„ํ•˜๋ฉฐ ์‹คํ–‰ ⇒ ๋Š๋ฆผ
  • Jit (Just In-Time) ์ปดํŒŒ์ผ๋Ÿฌ : JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ „์ฒด๋ฅผ ์ฝ์–ด ํ•œ๊บผ๋ฒˆ์— ๋ณ€ํ™˜ํ•จ.
  • ๋ชจ๋“  ์ฝ”๋“œ๋Š” ์ดˆ๊ธฐ์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์‹œ์ž‘๋˜๊ณ , ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ JIT ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰. ์ดˆ๊ธฐ์— ์ธํ„ฐํ”„๋ฆฌํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•˜๋ฉด์„œ ๊ทธ ์ฝ”๋“œ๋ฅผ ์บ์‹ฑํ•˜์—ฌ, ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ถˆ๋ฆด ๋•Œ ๋งค๋ฒˆ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ.
  • ์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ๋ณด๊ด€๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๊ฐ€๋Šฅํ•จ. JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” JVM์˜ ํ•ต์‹ฌ์œผ๋กœ JVM ๋‚ด์—์„œ ์„ฑ๋Šฅ์— ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ์ค€๋‹ค.
  1. Garbage Collector : Garbage Collector(GC)๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค ์ค‘์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ ํ›„ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• . ์ด๋•Œ, GC๊ฐ€ ์—ญํ• ์„ ํ•˜๋Š” ์‹œ๊ฐ„์€ ์–ธ์ œ์ธ์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†๋‹ค.
  2. Runtime Data Area : JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ ์žฌํ•˜๋Š” ์˜์—ญ. ์ด ์˜์—ญ์€ ํฌ๊ฒŒ Method Area, Heap Area, Stack Area, PC Register, Native Method Stack๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
  • 1. Method area (๋ฉ”์†Œ๋“œ ์˜์—ญ) : ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ ‘๊ทผ ์ œ์–ด์ž ์ •๋ณด๊ฐ™์€ ํ•„๋“œ ์ •๋ณด์™€ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„, ๋ฆฌํ„ด ํƒ€์ž…, ํŒŒ๋ผ๋ฏธํ„ฐ, ์ ‘๊ทผ ์ œ์–ด์ž ์ •๋ณด๊ฐ™์€ ๋ฉ”์†Œ๋“œ ์ •๋ณด, Type์ •๋ณด(Interface์ธ์ง€ class์ธ์ง€), Constant Pool(์ƒ์ˆ˜ ํ’€ : ๋ฌธ์ž ์ƒ์ˆ˜, ํƒ€์ž…, ํ•„๋“œ, ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ ์ €์žฅ๋จ), static ๋ณ€์ˆ˜, final class ๋ณ€์ˆ˜๋“ฑ์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • 2. Heap area (ํž™ ์˜์—ญ) : new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์ด๋‹ค. ๋ฉ”์†Œ๋“œ ์˜์—ญ์— ๋กœ๋“œ๋œ ํด๋ž˜์Šค๋งŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ  Garbage Collector๊ฐ€ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
  • 3. Stack area (์Šคํƒ ์˜์—ญ)

์ง€์—ญ ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฆฌํ„ด ๊ฐ’, ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ ๊ฐ’๋“ฑ์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์ด๋‹ค.

int a = 10; ์ด๋ผ๋Š” ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ์ •์ˆ˜๊ฐ’์ด ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ a๋ผ๊ณ  ์žก์•„๋‘๊ณ  ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๊ฐ’์ด 10์ด ๋“ค์–ด๊ฐ„๋‹ค. ์ฆ‰, ์Šคํƒ์— ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋ฆ„์ด a๋ผ๊ณ  ๋ถ™์—ฌ์ฃผ๊ณ  ๊ฐ’์ด 10์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋งŒ๋“ ๋‹ค.

ํด๋ž˜์Šค Person p = new Person(); ์ด๋ผ๋Š” ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด Person p๋Š” ์Šคํƒ ์˜์—ญ์— ์ƒ์„ฑ๋˜๊ณ  new๋กœ ์ƒ์„ฑ๋œ Person ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ํž™ ์˜์—ญ์— ์ƒ์„ฑ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์˜์—ญ์— ์ƒ์„ฑ๋œ p์˜ ๊ฐ’์œผ๋กœ ํž™ ์˜์—ญ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ฆ‰, ์Šคํƒ ์˜์—ญ์— ์ƒ์„ฑ๋œ p๊ฐ€ ํž™ ์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ (์ฐธ์กฐํ•˜๊ณ ) ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ณ„์ ์œผ๋กœ ์Šคํƒ์ด ์ƒ์„ฑ๋œ๋‹ค.

  • 4. PC Register (PC ๋ ˆ์ง€์Šคํ„ฐ)

Thread(์“ฐ๋ ˆ๋“œ)๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์œผ๋กœ Program Counter ์ฆ‰, ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์˜ ์ฃผ์†Œ์™€ ๋ช…๋ น์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์˜์—ญ์ด๋‹ค. (*CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋‹ค๋ฆ„)

์ด๊ฒƒ์„ ์ด์šฉํ•ด์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

  • 5. Native method stack

์ž๋ฐ” ์™ธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.

๋ณดํ†ต C/C++๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์ด๋‹ค. (JNI)

  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ๊ธฐ์ค€์œผ๋กœ 1,2๋ฒˆ์ธ ๋ฉ”์†Œ๋“œ ์˜์—ญ๊ณผ ํž™ ์˜์—ญ์„ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๊ณ , 3,4,5๋ฒˆ์ธ ์Šคํƒ ์˜์—ญ๊ณผ PC ๋ ˆ์ง€์Šคํ„ฐ, Native method stack์€ ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๊ณ  ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.

9. ๊ฐ์ฒด์ง€ํ–ฅ ํ•œ์ค„ ์ •๋ฆฌ

  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™”์‹œ์ผœ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•
  1. ์žฅ์  :
  2. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ด : ์ƒ์†์„ ํ†ตํ•ด ํ™•์žฅ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฐฐํฌ๋œ ํด๋ž˜์Šค๋ฅผ ์ด์šฉ ๊ฐ€๋Šฅ.
  3. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€ : ์ ˆ์ฐจ์‹ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜์ • ์‹œ ์ผ์ผํžˆ ์ฐพ์•„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋ณ€์ˆ˜ ํ˜น์€ ๋ฉ”์„œ๋“œ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ธฐ ๋–„๋ฌธ์ด๋‹ค.
  4. ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ : ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ๋ชจ๋“ˆํ™”์‹œ์ผœ์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋ช…, ์—ฌ๋Ÿฌ ํšŒ์‚ฌ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์—…๋ฌด ๋ถ„๋‹ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
  5. ๋‹จ์  :
  6. ⇒ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆผ
  7. ⇒ ๊ฐ์ฒด๊ฐ€ ๋งŽ์œผ๋ฉด ์šฉ๋Ÿ‰์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Œ
  8. ⇒ ์„ค๊ณ„ ์‹œ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”
  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ‚ค์›Œ๋“œ 5๊ฐ€์ง€
  1. ํด๋ž˜์Šค + ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด) : ํด๋ž˜์Šค → ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™”๋ฅผ ๊ฑฐ์ณ ์ง‘๋‹จ์— ์†ํ•˜๋Š” ์†์„ฑ(attribute)๊ณผ ํ–‰์œ„(behavior)๋ฅผ ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ๋กœ ์ •์˜ํ•œ ๊ฒƒ, ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด) → ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฒƒ
  2. ์ถ”์ƒํ™” : ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋ฅผ ์˜๋ฏธ, ๊ณตํ†ต์˜ ์†์„ฑ์ด๋‚˜ ๊ธฐ๋Šฅ์„ ๋ฌถ์–ด ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ๊ฒƒ. ex) ์ถ”์ƒ ํด๋ž˜์Šค ๊ฐ™์€ ๋Š๋‚Œ : ํ˜•ํƒœ์™€ ์†์„ฑ๋งŒ ๋ถ€๊ฐ ์‹œํ‚ค๋Š” ๊ฒƒ, ๋–ก ๋ผ๋ฉด, ๋งŒ๋‘ ๋ผ๋ฉด
  3. ์บก์Šํ™” : ์บก์Šํ™”์˜ ๋ชฉ์  2๊ฐ€์ง€
  • ⇒ ์ฝ”๋“œ๋ฅผ ์žฌ์ˆ˜์ • ์—†์ด ์žฌํ™œ์šฉ ํ•˜๋Š” ๊ฒƒ
  • ⇒ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•œ ์ •๋ณด ์€๋‹‰
  • ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š์•„์•ผ ํ•  ์ •๋ณด ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•ด ์ ์ ˆํžˆ ์ œ์–ด ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฐ์ฒด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ๊ณผ ํŠน์„ฑ์„ ํ•œ ๊ณณ์— ๋ชจ์œผ๊ณ  ๋ถ„๋ฅ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์žฌํ™œ์šฉ์ด ์›ํ• ํ•ด์กŒ๋‹ค. ๊ธฐ๋Šฅ๊ณผ ํŠน์„ฑ์˜ ๋ชจ์Œ์„ “ํด๋ž˜์Šค”๋ผ๋Š” “์บก์Š”์— ๋ถ„๋ฅ˜ํ•ด์„œ ๋„ฃ๋Š” ๊ฒƒ์ด ์บก์Šํ™”. ๊ฐ์ฒด๊ฐ€ ๋งก์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ๋ชฉ์ ์„ ํ•œ๋ฐ ๋ฌถ๋Š”๋‹ค.
  1. ์ƒ์† : ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์ด์–ด๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๊ณ  ๊ธฐ
  2. ๋Šฅ์˜ ์ผ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์ƒ์†๋ฐ›์€ ์ž์‹ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ๋งŒ ๋‹ค์‹œ ์ˆ˜์ •(์ •์˜)ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ
  3. ๋‹คํ˜•์„ฑ : ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ช…, ํ•จ์ˆ˜๋ช… ๋“ฑ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉ ****: ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ ํ•˜๋Š”๊ฒƒ.
  • ์˜ค๋ฒ„๋กœ๋”ฉ ****: ๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ •์˜ํ•˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ.

10. primitive type & reference type ์ฐจ์ด์ 

  1. Boxing, Unboxing
  • **Boxing(๋ฐ•์‹ฑ)**์€ ์›์‹œ ํƒ€์ž…์„ ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•˜๊ณ , **Unboxing(์–ธ๋ฐ•์‹ฑ)**์€ ์ฐธ์กฐ ํƒ€์ž…์„ ์›์‹œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ์ž๋ฐ” 1.5 ์ด์ „์—๋Š” ์ผ์ผํžˆ ๋ณ€ํ™˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ, ์ž๋ฐ” 1.5๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ Auto Boxing / Unboxing ๊ธฐ๋Šฅ์œผ๋กœ ์•„๋ž˜์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ๋ช…์‹œ์ ์œผ๋กœ ์›์‹œํƒ€์ž…์„ ์ฐธ์กฐํƒ€์ž…์œผ๋กœ ๊ฐ์‹ธ์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ Boxing / Unboxing ํ•ด์ค€๋‹ค. ⇒ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ์›์ธ์ด ๋จ.
  1. Null ํฌํ•จ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
  • ์›์‹œํƒ€์ž…์€ null์„ ๋‹ด์„ ์ˆ˜ ์—†์ง€๋งŒ, ์ฐธ์กฐ ํƒ€์ž…์€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  1. ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€
  • ์›์‹œํƒ€์ž…์€ ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ฐธ์กฐ ํƒ€์ž…์€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  1. Wrapper ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
  • ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋ฅผ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ (๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๋ฅผ ์š”๊ตฌํ•  ๋•Œ, ๊ธฐ๋ณธํ˜• ๊ฐ’์ด ์•„๋‹Œ ๊ฐ์ฒด๋กœ ์ €์žฅํ•ด์•ผํ•  ๋•Œ, ๊ฐ์ฒด๊ฐ„์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•  ๋–„ ๋“ฑ๋“ฑ)
๋ฐ˜์‘ํ˜•