[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item06 ์™„๋ฒฝ๊ณต๋žต. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ Garbage Collection GC

2023. 1. 19. 15:21ใ†JAVA/Effective JAVA

728x90

 

item06. ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ. 

" p32. ํ•œ ๋ฒˆ ์“ฐ๊ณ  ๋ฒ„๋ ค์ ธ์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋Œ€์ƒ์ด ๋œ๋‹ค."

 

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ์ด๋ž€? 

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

 

https://coding-factory.tistory.com/829

 

[Java] ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC, Garbage Collection) ์ด์ •๋ฆฌ

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์ด๋ž€? ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์˜์–ด๋กœ Garbeage Collection์œผ๋กœ ์ค„์—ฌ์„œ GC๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ JVM์˜ Heap ์˜์—ญ์—์„œ ๋™์ ์œผ๋กœ

coding-factory.tistory.com

์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ๋ฐฑ๊ธฐ์„ ๋‹˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ ... ํ•ด๋‹น ๊ฐ•์˜์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์„ค๋ช…ํ•˜๋Š” ๋ชฉ์ ์˜ ๊ฐ•์˜๊ฐ€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์งง๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ 

์ถ”๊ฐ€๋กœ ๋” ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ค๊ฐ€ ์„ค๋ช…์„ ์ž˜ ํ•ด๋‘” ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 

 

์šฐ์„  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด๋ž€?

๊ฐ์ฒด๋“ค์€ ์‹ค์งˆ์ ์œผ๋กœ๋Š” Heap ์˜์—ญ์—์„œ ์ƒ์„ฑ๋˜๊ณ , Method Area๋‚˜ Stack Area ๋“ฑ Root Area ์—์„œ๋Š” Heap Area์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋งŒ ์ฐธ์กฐํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.  ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์ด ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๋Š” ๋“ฑ์˜ ์ด๋ฒคํŠธ๋“ค๋กœ ์ธํ•˜์—ฌ Heap Area ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์‚ญ์ œ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด Heap ์˜์—ญ์—์„œ ์–ด๋””์—์„œ๋„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. 

์ด๋ ‡๊ฒŒ ์–ด๋””์—์„œ๋„ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋˜๋ฉฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•ด์ค€๋‹ค. 

 

Reachable : ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ 
Unreachable : ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํƒœ (GC์˜ ๋Œ€์ƒ์ด๋จ) 

 

 

Mark, Sweep, Compact 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ Mark, Sweep, Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋•Œ ๋ฃจํŠธ์—์„œ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ์˜ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋Š”๋‹ค. 

 

Mark : Root๋กœ ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋“ค์„ ์ฐพ์•„๋‚ด์–ด ๊ฐ๊ฐ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฐพ์•„์„œ ๋งˆํ‚นํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. 

Sweep : ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด (Unreachable) ๊ฐ์ฒด๋“ค์„ Heap์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. 

Compact :  Sweep ํ›„์— ๋ถ„์‚ฐ๋œ ๊ฐ์ฒด๋“ค์„ Heap์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ๋ชจ์•„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ ๋ถ€๋ถ„๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ์••์ถ•ํ•œ๋‹ค. 

 

 

Young Generation(Eden, S0, S1), Old Generation

GC์˜ ๋Œ€์ƒ์ด ๋˜๋Š” Heap ์˜์—ญ์€ ํšจ์œจ์ ์ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ณผ์ •์„ ์œ„ํ•ด์„œ Eden, S0(Survival 0), S1(Survival 1), Old Generation ์œผ๋กœ ๋‚˜๋‰œ๋‹ค. 

 

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

 

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

 

Minor GC, Full GC

Minor GC๋Š” Young Generation์—์„œ ์ผ์–ด๋‚˜๋Š” GC์ด๊ณ , Full GC(Major GC)๋Š” Old Geneartion ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ๋ณดํ†ต Old Generation ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” GC์ด๋‹ค. 

Major GC๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ธ๋ฐ ์ด๋•Œ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์ž‘์—…์„ ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค. -> ์ด๋ ‡๊ฒŒ ์ž‘์—…์„ ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์„ Stop-The-World๋ผ๊ณ  ํ•˜๊ณ  ์ด ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ์‹œ์Šคํ…œ์˜ ์žฅ์• ๋ฅผ ์ผ์œผํ‚ค๊ธฐ๋„ ํ•œ๋‹ค. 

 

 

Throughput, Latency (Stop-The-World), Footprint 

Throughput : ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์‹œ๊ฐ„ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ๋งŽ๊ณ , GCํ•˜๋Š” ์‹œ๊ฐ„์ด ์งง์•„์•ผ ํ•œ๋‹ค.)

Latency : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ์†๋„. (GC๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜๋ก Latency๊ฐ€ ๋–จ์–ด์ง„๋‹ค.)

Footprint : ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ์ธ๋ฐ GC๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ (GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์–ผ๋งˆ๋งŒํผ์ธ๊ฐ€?)

 

 

GC ๊ตฌํ˜„์ฒด 

- Serial Garbage Collector

: ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GC ๊ตฌํ˜„์ฒด๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์œ„์—์„œ ๋Œ์•„๊ฐ„๋‹ค. (์„œ๋ฒ„์™€ ๊ฐ™์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค) 

์ฃผ๋กœ ์ผ์‹œ ์ •์ง€์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 

 

- Parallel Garbage Collector

: Java 8์˜ ๊ธฐ๋ณธ GC๋กœ Serial Garbage Collector์™€๋Š” ๋‹ฌ๋ฆฌ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ heap์„ ๊ด€๋ฆฌํ•œ๋‹ค. 

 

- CMS Garbage Collector 

: ์ด GC๋Š” Java 9๋ถ€ํ„ฐ Deprecated๋œ ๊ฒƒ์œผ๋กœ ์ด GC๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋กœ์„ธ์„œ ์ž์›์„ ํ™œ์šฉํ•˜์—ฌ ์ผ์‹œ ์ •์ง€ ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€๋‹ค. (-> ๊ทธ๋งŒํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋Š๋ ค์ง) 

Deprecated๋œ๊ฑฐ๋‹ˆ๊นŒ ๊ฐœ๋…์ •๋„๋งŒ ์•Œ๊ณ  ์žˆ๊ธฐ

 

- G1 Garbage Collector

: java9 ~ 12์˜ ๊ธฐ๋ณธ GC๋กœ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. 

Mark and Sweep and Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

- Z Garbage Collector (ZGC)

: ๊ฐ€์žฅ ๋ฐœ์ „๋œ GC๋กœ 10ms ์ด์ƒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ , ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ชจ๋“  ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ ํ•˜๋ฏ€๋กœ ๋‚ฎ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

728x90