์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Factory Method Pattern
- ํ๋ IT&E
- Android Studio
- datepicker
- 2024-08-21
- URN
- url
- uri
- http method
- tcp
- ์ด๋ ธํ ์ด์
- OOP
- fontstyle
- Kotlin
- reflection
- FACTORY
- ๊ธฐ์ด100์
- udp
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- menutab
- di
- swagger
- OpenAPI
- AndroidStudio
- ์ฑ์ฉํ์ ํ
- 2024-08-20
- IOC
- ์ฝ๋์
- Dialog
- Python
dingdong coding
[ JAVA ] Garbage Collection ๋ณธ๋ฌธ
GC ( Garbage Collection )
GC๋ Heap ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌํ์ฉํ๊ธฐ ์ํด Root Set์์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํด์ ํด ๊ฐ์ฉ๊ฐ๋ฅํ ๊ณต๊ฐ์ ๋ง๋๋ ์์ ์ ๋๋ค.
* ์ฐธ์กฐ๋ ๊ฐ์ฒด : ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๊ฐ ์ฌ์ ํ ํด๋น ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ ์งํ๊ณ ์์์ ์๋ฏธ
* ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด : ํ๋ก๊ทธ๋จ์ ์ด๋ค ๋ถ๋ถ์์๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ ๋ฐ๋ผ์ ํด๋น ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ํ์
์๋ฐ์์๋ ์ด๋ฌํ ๋ฉ๋ชจ๋ฆฌ ํด์ ์์ ์ Garbage Colletor๊ฐ ๋ด๋นํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ์์ ์ Garbage Collection์ด๋ผ ํฉ๋๋ค. ์ฆ null, System.gc() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฑ๊ณผ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํด ํด์ ํ๋ ์์ ์ ํ์ง ์์๋ ๋๋ค. null๋ก ์ง์ ํ๋ ๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง System.gc() ๋ฉ์๋๋ ์์คํ ์ฑ๋ฅ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ์ ๋ ์ฌ์ฉํด์๋ ์๋๋ค.
Heap Young, Old
๊ฐ์ฒด๋ ๋๋ถ๋ถ ์ผํ์ฑ์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ ๋จ์์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ Heap์ ์์กด๊ธฐ๊ฐ์ ๋ฐ๋ผ ํฌ๊ฒ 2๊ฐ์ ๋ฌผ๋ฆฌ์ ์ธ ๊ณต๊ฐ์ ๋๋๊ฒ ๋ฉ๋๋ค. Young ์์ญ๊ณผ Old ์์ญ
1 ) Young ์์ญ
• ์๋กญ๊ฒ ์์ฑํ ๊ฐ์ฒด์ ๋๋ถ๋ถ์ด ์ฌ๊ธฐ์ ์์นํฉ๋๋ค.
• ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅ ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋ง์ ๊ฐ์ฒด๊ฐ Young ์์ญ์ ์์ฑ๋์๋ค๊ฐ ์ฌ๋ผ์ง๋๋ค.
• ์ด ์์ญ์์ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง๋ Minor GC๊ฐ ๋ฐ์ํ๋ค๊ณ ๋งํฉ๋๋ค.
• ์๋ช ์ด ์งง์ ๊ฐ์ฒด๋ค์ด ๋ณดํต Young์ ํ ๋น๋ฉ๋๋ค.
2 ) Old ์์ญ
• ์ ๊ทผ ๋ถ๊ฐ๋ฅ ์ํ๋ก ๋์ง ์์ Young ์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ฌ๊ธฐ๋ก ๋ณต์ฌ๋ฉ๋๋ค.
• ๋๋ถ๋ถ Young ์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋นํ๋ฉฐ, ํฌ๊ธฐ๊ฐ ํฐ ๋งํผ Young ์์ญ๋ณด๋ค GC๋ ์ ๊ฒ ๋ฐ์ํฉ๋๋ค.
• ์ด ์์ญ์์ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง ๋ Major GC(ํน์ Full GC)๊ฐ ๋ฐ์ํ๋ค๊ณ ๋งํฉ๋๋ค.
• ์ฆ ํฐ ๊ฐ์ฒด๋ค์ด Old์ ํ ๋น๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด GC๊ฐ ์ ์ฒด ์์ญ์ ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๋ํ๋๋ ์ด์ ์ด ์กด์ฌํฉ๋๋ค.
Young์ Old๋ณด๋ค ์ฌ์ด์ฆ๊ฐ ์๊ณ , GC๊ฐ ์ ์ฒด ์์ญ์ ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์ง๋๋( stop-the-world ) ์๊ฐ์ด ์งง์ ์ง๋๋ค. ๋ํ Young ์ ํ ๋ฒ์ ๋น์ฐ๊ธฐ ๋๋ฌธ์ ์ฐ์๋ ์ฌ์ ๊ณต๊ฐ์ ๋ง๋ค ์ ์์ต๋๋ค.
** stop-the world : JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ฉ์ถ๋ ์์ ์ผ๋ก GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฐ๋ ๋ ์์ ์ ์ค๋จ์ํค๋ ๊ฒ
Young ์์ญ
• Young์์ญ์ Eden ์์ญ, Survivor ์์ญ์ผ๋ก ๋๋ ์ง๋๋ค.
1. ์๋ก ์์ฑํ ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ Eden ์์ญ์ ์์น
2. Eden์์ญ์์ GC๊ฐ ํ ๋ฒ ๋ฐ์ํ ํ ์ด์๋จ์ ๊ฐ์ฒด๋ Survivor ์์ญ ์ค ํ๋๋ก ์ด๋
3. Eden ์์ญ์์ GC๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฏธ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ Survivor ์์ญ์ผ๋ก ๊ฐ์ฒด๊ฐ ๊ณ์ ์์
4. ํ๋์ Survivor ์์ญ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด ๊ทธ ์ค์์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ Survivor ์์ญ์ผ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ ์ฐฌ Survivor ์์ญ์ ์๋ฌด ๋ฐ์ดํฐ๋ ์๋ ์ํ๋ก ๋จ
5. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ๊ณ์ํด์ ์ด์๋จ์ ์๋ ๊ฐ์ฒด๋ Old ์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋๋ค.
Old ์์ญ
Old ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋์ฐจ๋ฉด GC๋ฅผ ์คํํฉ๋๋ค. ๊ฐ์ฒด๋ค์ด ๊ณ์ Old์์ญ์ผ๋ก ์ด๋ํด Old ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
Garbage Collection ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ
- Serial GC
- Parallel GC
- Parallel Old GC(Parallel Compacting GC)
- Concurrent Mark & Sweep GC(์ดํ CMS)
- G1(Garbage First) GC
1) Serial GC
: Young ์์ญ์์์ GC๋ ์ ์ ์์ ์ค๋ช ํ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
: Old ์์ญ์ GC๋ mark-sweep-compact์ด๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
: Desktop CPU ์ฝ์ด๊ฐ ํ๋๋ง ์์ ๋ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋๋ ๋ฐฉ์
2) Parallel GC
: Throughput GC๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
: Parallel GC๋ Serial GC์ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ต๋๋ค.
: ๊ทธ๋ฌ๋ Serial GC๋ GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๊ฐ ํ๋์ธ ๊ฒ์ ๋นํด, Parallel GC๋ GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋๋ค.
: ๋๋ฌธ์ Serial GC๋ณด๋ค ๋น ๋ฅธ๊ฒ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
: ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ๊ณ ์ฝ์ด์ ๊ฐ์๊ฐ ๋ง์ ๋ ์ ๋ฆฌํฉ๋๋ค.
3) Parallel Old GC (Parallel Compacting GC)
: Parallel GC์ ๋น๊ตํ์ฌ Old ์์ญ์ GC ์๊ณ ๋ฆฌ์ฆ๋ง ๋ค๋ฆ ๋๋ค.
: Mark-Summary-Compaction ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
: Summary ๋จ๊ณ๋ ์์ GC๋ฅผ ์ํํ ์์ญ์ ๋ํด์ ๋ณ๋๋ก ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ค๋ ์ ์์ Mark-Sweep-Compaction ์๊ณ ๋ฆฌ์ฆ์ Sweep ๋จ๊ณ์ ๋ค๋ฅด๋ฉฐ, ์ฝ๊ฐ ๋ ๋ณต์กํ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค.
4) Concurrent Mark & Sweep GC
: ์ดํ๋ฆฌ์ผ์ด์ ์ ์๋ต์๋๊ฐ ์ค์ํ ๋ ์ด์ฉํ๋ฉฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ง์ฐ์๊ฐ์ ๋ฎ์ถฅ๋๋ค.
: ์ดํ๋ฆฌ์ผ์ด์ , GC thread๊ฐ ๋์์ ์คํ๋์ด stop-the-world ์๊ฐ์ ์ต์ํ ํ๋ GC
: stop-the-world ์๊ฐ์ด ์งง์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
- ๋ค๋ฅธ GC ๋ฐฉ์๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ์ CPU๋ฅผ ๋ ๋ง์ด ์ฌ์ฉ
- Compaction ๋จ๊ณ๋ฅผ ์ํํ์ง X
: ๋๋ฌธ์ ์กฐ๊ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ค์ด ๋ง์ Compaction ์์ ์ ์ํํ๋ฉด ์คํ๋ ค ๋ค๋ฅธ GC์ Stop The World๋ณด๋ค Stop The World ์๊ฐ์ด ๋ ๊ธธ์ด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ ์๋ ์์ต๋๋ค.
* Compaction : ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ณต๊ฐ ์ฌ์ด์ ์ฌ์ฉํ์ง ์๋ ๋น ๊ณต๊ฐ์ด ์๋๋ก ์ฎ๊ฒจ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จํธํํ๋ ์์
5) G1(Garbage First) GC
: G1 GC๋ ๋ฐ๋ํ์ ๊ฐ ์์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ GC๋ฅผ ์คํํฉ๋๋ค.
: ํด๋น ์์ญ์ด ๊ฝ ์ฐจ๋ฉด ๋ค๋ฅธ ์์ญ์์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ GC๋ฅผ ์คํํฉ๋๋ค.
: ์ฆ, ์ง๊ธ๊น์ง ์ค๋ช ํ Young์ ์ธ๊ฐ์ง ์์ญ์์ ๋ฐ์ดํฐ๊ฐ Old ์์ญ์ผ๋ก ์ด๋ํ๋ ๋จ๊ณ๊ฐ ์ฌ๋ผ์ง GC ๋ฐฉ์์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋ฉ๋๋ค.
: G1 GC๋ ์ฅ๊ธฐ์ ์ผ๋ก ๋ง๋ ๋ง๊ณ ํ๋ ๋ง์ CMS GC๋ฅผ ๋์ฒดํ๊ธฐ ์ํด์ ๋ง๋ค์ด ์ก์ต๋๋ค.
ํ์ต์ ๋ง์ ๋์์ด ๋ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ต๋๋ค. ๐
์ฐธ์กฐ ๋ฐ ์ถ์ฒ
Java Garbage Collection Basics
[Java] Garbage Collection(๊ฐ๋น์ง ์ปฌ๋ ์ )์ ๊ฐ๋ ๋ฐ ๋์ ์๋ฆฌ (1/2)
'๐ฐJAVA > Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ JAVA ] Reflection (0) | 2022.07.24 |
---|---|
[JAVA ] Set Interface (0) | 2022.06.28 |
[JAVA ] List Interface (0) | 2022.06.20 |
[JAVA ] Collection (0) | 2022.06.20 |
[ JAVA ] Optional (0) | 2022.06.15 |