๊ธฐํƒ€/Java

JVM

stonesy 2024. 10. 30. 11:04
728x90

๐Ÿ“ŒJVM

JVM์€ Java๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ์ด๋‹ค. Java๋Š” OS์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, OS์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” JVM์ด ํ•„์š”ํ•˜๋‹ค. 

Java ์†Œ์Šค์ฝ”๋“œ(*.java)๋Š” CPU๊ฐ€ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, Java Compiler๋ฅผ ํ†ตํ•ด .java๊ฐ€ .class๋ผ๋Š” Java bytecode๋กœ ๋ณ€ํ™˜๋˜๊ณ  JVM์„ ํ†ตํ•ด ์ตœ์ข…์ ์œผ๋กœ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋œ๋‹ค. ์ด๋•Œ, Java Compiler๋ž€ JDK๋ฅผ ์„ค์น˜ํ•˜๋ฉด bin์— ์กด์žฌํ•˜๋Š” javac.exe๋ฅผ ๋งํ•˜๋ฉฐ javac ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด .java๋ฅผ .class๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํŠน์ง•

1. ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜

2. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹ 

3. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ Garbage Collection(GC)๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๊ตฌ์กฐ

 

JVM ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ Class Loader, Runtime data areas, Execution Engine, GC๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. 

๊ตฌ๋ถ„ ์—ญํ• 
Class Loader ํด๋ž˜์Šค ํŒŒ์ผ์„ Runtime Data Area์˜ ๋ฉ”์„œ๋“œ ์˜์—ญ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
Execution Engine Execution Engine์€ .class ํŒŒ์ผ๊ณผ ๊ฐ™์€ Java bytecode๋“ค์„ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.
GC ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, Heap ์˜์—ญ์— ๋ฐฐ์น˜๋œ ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
Runtime Data Area ๋Ÿฐํƒ€์ž„์‹œ ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์™€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์ด๋‹ค.

*Java๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์œผ๋กœ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” Heap๊ณผ Method Area๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

 

Garbage Collection

Java๋‚˜ Kotlin์˜ ๊ฒฝ์šฐ์—๋Š” JVM์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ •๋ฆฌํ•ด์ค€๋‹ค. JVM์˜ Heap ์˜์—ญ์€ ๋‹ค์Œ์˜ 2๊ฐ€์ง€ ์ „์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

- ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. (Unreachable)

- ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

์ฆ‰, ๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผํšŒ์„ฑ์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋žซ๋™์•ˆ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

*Young ์˜์—ญ(Young Generation)

- ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ

- ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ Unreachable ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๊ฐ์ฒด๊ฒŒ Young Generation์— ์ƒ๊ฒผ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

- Young Generation์— ๋Œ€ํ•œ GC๋ฅผ Minor GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

*Old ์˜์—ญ(Old Generation)

- Young ์˜์—ญ์—์„œ Reachable ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์˜์—ญ

- Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๋ฉฐ, ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ ๊ฐ€๋น„์ง€๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

- Old Generation์— ๋Œ€ํ•œ GC๋ฅผ Major GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

Card ํ…Œ์ด๋ธ”์—๋Š” Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค. ์นด๋“œ ํ…Œ์ด๋ธ”์ด ๋„์ž…๋œ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. Young ์˜์—ญ์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Minor GC)๊ฐ€ ์‹คํ–‰๋  ๋•Œ Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์นด๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ง„ํ–‰ํ•  ๋•Œ ์นด๋“œ ํ…Œ์ด๋ธ”๋งŒ ์กฐํšŒํ•˜์—ฌ GC์˜ ๋Œ€์ƒ์ธ์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.

 

Minor GC ๋™์ž‘ ๋ฐฉ์‹

Young ์˜์—ญ์€ 1๊ฐœ์˜ Eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ Survivor ์˜์—ญ, ์ด 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

- Eden ์˜์—ญ: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ

- Survivor ์˜์—ญ: ์ตœ์†Œ 1๋ฒˆ์˜ GC ์ด์ƒ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์˜์—ญ

 

๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด Young ์˜์—ญ ์ค‘์—์„œ๋„ Eden ์˜์—ญ์— ํ• ๋‹น(Allocation)๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ๋˜๊ณ  Eden ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋Š” ์‚ฌ์šฉ์ค‘์ธ Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค. Survivor ์˜์—ญ์€ ์ด 2๊ฐœ์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ 1๊ฐœ์˜ ์˜์—ญ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

 

1) ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ Eden ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.
2) ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜์–ด Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๊ฒŒ ๋˜๊ณ  Minor GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    2-1) Eden ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.
    2-2) Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” 1๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™๋œ๋‹ค.
3) 1~2๋ฒˆ์˜ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋‹ค๊ฐ€ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด Survivor ์˜์—ญ์˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.(1๊ฐœ์˜ Survivor ์˜์—ญ์€ ๋ฐ˜๋“œ์‹œ ๋นˆ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.)
4)์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™(Promotion)๋œ๋‹ค

 

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๋ฐฐ ์ด์ƒ์˜ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ฐธ๊ณ 

https://mangkyu.tistory.com/118

https://backendcode.tistory.com/161

https://asfirstalways.tistory.com/158

728x90

'๊ธฐํƒ€ > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JAVA(2)  (0) 2024.01.28
JAVA(1)  (0) 2024.01.20
[๋””์ž์ธํŒจํ„ด]Iterator Pattern  (0) 2021.12.02
[Design Pattern]Adapter Pattern  (0) 2021.11.16
[Design Pattern]Command Pattern  (0) 2021.11.16