JVM
Java Virtual Machine
์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ 


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

 

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

 

์™œ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์„ ์•Œ์•„์•ผํ• ๊นŒ?

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

 

 

 


 

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

1. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. 
                         JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.
2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค. ( .java -> .class )
3. Class Loader๋ฅผ ํ†ตํ•ด class ํŒŒ์ผ๋“ค์„ JVM์œผ๋กœ ๋กœ๋”ฉํ•œ๋‹ค.
4. ๋กœ๋”ฉ๋œ class ํŒŒ์ผ๋“ค์€ Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.
5. ํ•ด์„๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” runtime data areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
             ์ด๋Ÿฌํ•œ ์‹คํ–‰๊ณผ์ • ์†์—์„œ JVM์€ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ GC ๊ฐ™์€ ๊ด€๋ฆฌ์ž‘์—… ์ˆ˜ํ–‰

 

 

JVM

 

 

JVM ๊ตฌ์„ฑ

Class Loader

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

 

 

Execution Engine 

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

์ด๋•Œ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

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

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

 

Garbage collector

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

 

 

 

 


Runtime Data Area

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

Runtime Data Area

 

1. PC ๋ ˆ์ง€์Šคํ„ฐ

Thread๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค.

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

 

 

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

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

๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„(๊ทธ ๋ฉ”์†Œ๋“œ๋งŒ์„ ์œ„ํ•œ ๊ณต๊ฐ„)์ด ์ƒ์„ฑ๋œ๋‹ค.

๋ฉ”์†Œ๋“œ ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด ํ”„๋ ˆ์ž„ ๋ณ„๋กœ ์‚ญ์ œ๋ฅผ ํ•œ๋‹ค.

๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค(local variable)์„ ์ €์žฅํ•œ๋‹ค.

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

 

 

3. Native method stack

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

JAVA Native Interface๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. 

์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ปค๋„์ด ์Šคํƒ์„ ์žก์•„ ๋…์ž์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค.

์ด ๋ถ€๋ถ„์„ ํ†ตํ•ด C code๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ปค๋„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

4. Metod Area = class area = static area

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

์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ์ด๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ main ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ์—์„œ๋ถ€ํ„ฐ ๊ณ„์†๋œ ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ๋กœ ํ๋ฆ„์„ ์ด์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๋Œ€๋ถ€๋ถ„ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๋„ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ๋ช…๋ นํ•˜๊ณ  ํ˜ธ์ถœํ•œ๋‹ค. 

์‚ฌ์‹ค์ƒ ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์˜  ๋Œ€๋ถ€๋ถ„์ด ๋ฉ”์†Œ๋“œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค๊ณ  ๋ด๋„ ์ƒ๊ด€ ์—†๋‹ค. 

์ด ๊ณต๊ฐ„์—๋Š” Runtime Constant Pool์ด๋ผ๋Š” ๋ณ„๋„์˜ ๊ด€๋ฆฌ์˜์—ญ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๋Š” ์ƒ์ˆ˜ ์ž๋ฃŒํ˜•์„ ์ €์žฅํ•˜์—ฌ ์ฐธ์กฐํ•˜๊ณ  ์ค‘๋ณต์„ ๋ง‰๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜ฌ๋ผ๊ฐ€๋Š” ์ •๋ณด์˜ ์ข…๋ฅ˜

- field information : ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ ‘๊ทผ ์ œ์–ด์ž์— ๋Œ€ํ•œ ์ •๋ณด
- method information : ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„, ๋ฆฌํ„ด ํƒ€์ž…, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ ‘๊ทผ ์ œ์–ด์ž์— ๋Œ€ํ•œ ์ •๋ณด
- type information : class์ธ์ง€ interface์ธ์ง€์˜ ์—ฌ๋ถ€ ์ €์žฅ, type์ด ์†์„ฑ, ์ „์ฒด ์ด๋ฆ„, super class์˜ ์ „์ฒด ์ด๋ฆ„

* method area = ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„   |   heap ์˜์—ญ = ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„

  heap๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ GC์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค.

 

 

5. Heap

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

๋ฌผ๋ก  class area ์˜์—ญ์— ์˜ฌ๋ผ์˜จ ํด๋ž˜์Šค๋“ค๋งŒ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

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

  • New/Young Generation

Eden : ๊ฐ์ฒด๋“ค์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„

Survivor 0/1 : Eden์—์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„

 

 

  • Old ์˜์—ญ

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

 

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

 

 

  • Permanent Generation

์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์˜ ์ •๋ณด์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์ด๋‹ค.

class loader์— ์˜ํ•ด ๋กœ๋“œ๋˜๋Š” class, method ๋“ฑ์— ๋Œ€ํ•œ meta ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๊ณ  JVM์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 

reflection์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ reflection ๊ธฐ๋Šฅ์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” spring framework๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ์ด ์˜์—ญ์— ๋Œ€ํ•œ ๊ณ ๋ ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

+ Recent posts