BackEnd๐Ÿงต

TIL - JVM(Java Virtual Machine)

hae02y 2023. 5. 15. 21:08
๋ฐ˜์‘ํ˜•

 

๐Ÿ‘€Today...


์‹œ์ž‘ํ•˜๊ธฐ์ „์— ์›ƒ๊ณ  ์‹ถ์–ด์„œ ์›ƒ๊ธด์งค ์ฐพ๋‹ค๊ฐ€ ๊ฐ€์ ธ์™”๋Š”๋ฐ ์•„์ง„์งœ ์นดํŽ˜์—์„œ ์†Œ๋ฆฌ๋‚ด์„œ ์›ƒ์—ˆ๋‹คใ…‹ใ…‹ใ…‹ ์ทจํ–ฅ์ €๊ฒฉ ๊ฐœ๊ทธ

 

โ˜•์˜ค๋Š˜์˜ TIL(Today I Learn)


JVM

JVM์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๋„๊ตฌ์ด๋‹ค. .java ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜์—ฌ .class ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค๋ฉด ์ด์ฝ”๋“œ๊ฐ€ JVMํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋œ๋‹ค. JVM์€ JRE(Java Runtime Environment)์— ํฌํ•จ๋˜์–ด์žˆ๋‹ค.  ์ฆ‰, ์ž๋ฐ”๋กœ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ณ„๋„์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. 

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

๋”๋ณด๊ธฐ

๋ฐ”์ดํŠธ ์ฝ”๋“œ : ์ธ๊ฐ„์นœํ™”์  JAVA์ฝ”๋“œ => ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•˜๋Š” ๊ธฐ๊ณ„์–ด์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„

 

 

JVM์˜ ๊ตฌ์กฐ

์ง€๊ธˆ๊นŒ์ง€ ๋ฒ„ํŠผ๋งŒ ๋ˆ„๋ฅด๋ฉด ์ž๋™์œผ๋กœ ์ง„ํ–‰๋˜๋˜ ์ž๋ฐ”์ฝ”๋“œ์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž!

1. ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ ์ž‘์„ฑ(.java) ํ›„์— ์‹คํ–‰

2. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜์–ด ์ปดํŒŒ์ผ์„ ์ง„ํ–‰

3. ์ปดํŒŒ์ผ์˜ ๊ฒฐ๊ณผ๋กœ ์ž๋ฐ”์ฝ”๋“œ(.java) => ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class) ํŒŒ์ผ๋กœ ๋ณ€ํ™˜

4. JVM์ด ์šด์˜์ฒด์ œ๋กœ ๋ถ€ํ„ฐ ์†Œ์Šค์ฝ”๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์Œ(Runtime Data Area)

5. ํด๋ž˜์Šค๋กœ๋”๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œํŒŒ์ผ์„ JVM์˜ Runtime Data Area์— ์ ์žฌ(์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ)

6. ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์‹คํ–‰์—”์ง„(Excution Engine)์ด Runtime Data Area์— ์ ์žฌ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰

7. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ํ•œ์ค„์”ฉ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์‹คํ–‰์‹œํ‚ด

8. ํŠน์ • ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์ž์ฃผ ์‹คํ–‰๋ ์‹œ์— JIT Compiler(Just-In-Time)๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰

[ref. JVM]

 

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

์ถœ์ฒ˜ : ์ฝ”๋”ฉํŒฉํ† ๋ฆฌ

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

 

 

JVM๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

# Stack Area / Heap Area

๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋ฉ”์„œ๋“œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ธ Method Frame์ด ์ƒ์„ฑ๋œ๋‹ค, ์ด๋•Œ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์— ์‚ฌ์šฉ๋˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ๋ฆฌํ„ด๊ฐ’, ์—ฐ์‚ฐ์‹œ ์ผ์–ด๋‚˜๋Š” ๊ฐ’๋“ค์ด ์ž„์‹œ๋กœ ์ €์žฅ๋œ๋‹ค. ์ด๋Ÿฌํ•œ Method Frame์ด Stack์— ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์Œ“์ด๊ณ  ๋™์ž‘์™„๋ฃŒ์‹œ์— ์—ญ์ˆœ์œผ๋กœ ์ œ๊ฑฐ๋œ๋‹ค. 

 

JVM์•ˆ์—๋Š” ๋‹จ ํ•˜๋‚˜์˜ Heap area๊ฐ€ ์กด์žฌํ•œ๋‹ค. JVM์ด ๋™์ž‘ํ•˜๋ฉด ์ด์˜์—ญ์€ ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ๋ฐฐ์—ด ๋“ฑ์„ ์ €์žฅํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด

Fruit apple = new Fruit();

new Fruit()๊ฐ€ ์‹คํ–‰๋˜๋ฉด Heap์˜์—ญ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ฃผ์†Œ๊ฐ’์„ apple์— ํ• ๋‹นํ•ด์ค€๋‹ค. ์ด๋•Œ apple์ด Stack์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ด๊ณ , ๊ฐ์ฒด๋ฅผ ์ ‘๊ทผํ•˜๋ฉด Stack์— ์ €์žฅ๋œ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ Heap์˜์—ญ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ Heap์˜์—ญ์€ ์‹ค์ œ ๊ฐ์ฒด์˜ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

 

 

Garbage Collection

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

 

# GC์˜ ๋‹จ์ 

1. ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•ด์ œ ์‹œ์ (GC์˜ ๋™์ž‘ ์‹œ์ )์„ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ์ˆ˜์—†๋‹ค.

2. GC๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ๋™์ž‘์„ ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

# GC์˜ ๋™์ž‘๋ฐฉ์‹

GC๋Š” Heap์— ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œํ•ด์ค€๋‹ค๊ณ  ํ–ˆ๋‹ค. Heap์˜ ์˜์—ญ์„ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ด์•„์žˆ๋Š” ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ์„œ Young๊ณผ Old ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

๋จผ์ €, Young ์˜์—ญ์—๋Š” ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๊ณ , ์—ฌ๊ธฐ์— ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ์ด๊ณณ์—์„œ ํ™œ๋™ํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ Minor GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Old์˜์—ญ์€ Young์˜์—ญ์—์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ๋ณต์‚ฌ๋˜๋Š” ๊ณณ์ด๋‹ค. ์ด๊ณณ์€ Young์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๊ณ , ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๊ณณ์—์„œ ํ™œ๋™ํ•˜๋Š” ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๋ฅผ Major GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

[ref. GC]


 

๋ฐ˜์‘ํ˜•