2023. 1. 19. 15:21ใJAVA/Effective JAVA
item06. ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ๋ผ.
" p32. ํ ๋ฒ ์ฐ๊ณ ๋ฒ๋ ค์ ธ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์ด ๋๋ค."
๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) ์ด๋?
: GC๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ์ค ํ๋๋ก JVM ์ Heap ์์ญ์์ ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ํ์ ์๊ฒ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ญ์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค.
https://coding-factory.tistory.com/829
์ดํํฐ๋ธ ์๋ฐ ๋ฐฑ๊ธฐ์ ๋ ๊ฐ์๋ฅผ ๋ฃ๊ณ ... ํด๋น ๊ฐ์์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ค๋ช ํ๋ ๋ชฉ์ ์ ๊ฐ์๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ ์งง๊ฒ ์ค๋ช ํด์ฃผ์ ์
์ถ๊ฐ๋ก ๋ ์์๋ณด๊ธฐ ์ํด์ ๊ฒ์ํด๋ณด๋ค๊ฐ ์ค๋ช ์ ์ ํด๋ ๋ธ๋ก๊ทธ๋ฅผ ๋ฐ๊ฒฌํด์ ์ด ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑํ ๊ธ์ ๋๋ค.
์ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋๋ ๊ฐ์ฒด๋?
๊ฐ์ฒด๋ค์ ์ค์ง์ ์ผ๋ก๋ 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 ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ์คํ์ ์ค๋จํ์ง ์๊ณ , ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ชจ๋ ์์ ์ ๋์์ ์ํ ํ๋ฏ๋ก ๋ฎ์ ๋๊ธฐ ์๊ฐ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ค.
'JAVA > Effective JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ ์๋ฐ] Item07 ์๋ฒฝ๊ณต๋ต.NullPointerException (0) | 2023.01.21 |
---|---|
[์ดํํฐ๋ธ ์๋ฐ] Item7. ๋ค ์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํด์ ํ๋ผ. (1) | 2023.01.21 |
[์ดํํฐ๋ธ ์๋ฐ] Item06 ์๋ฒฝ๊ณต๋ต. ์ ๊ท ํํ์ (0) | 2023.01.19 |
[์ดํํฐ๋ธ ์๋ฐ] Item06 ์๋ฒฝ๊ณต๋ต. Deprecation (0) | 2023.01.19 |
[์ดํํฐ๋ธ ์๋ฐ] Item6. ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ๋ผ. (0) | 2023.01.18 |