์ถ์ฒ
ChatGPT
Garbate Collection(๊ฐ๋น์ง ์ปฌ๋ ์ , GC)์ Java Virtual Machine(JVM)์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋ํํ๋ ํต์ฌ ๊ธฐ๋ฅ์ด๋ค. ๊ฐ๋ฐ์๋ ๋ช ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํ์ง ์๊ณ ๋ ์์ ํ๊ฒ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋์ผ๋ก ํ์ํ ์ ์๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
GC ์์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์์ ํ ๋ฐฉ์งํ ์๋ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋์์ ์ฃผ๋ ๋ฐฉ์๊ณผ ๊ทธ ํ๊ณ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฐ๋
๊ฐ๋น์ง ์ปฌ๋์ ์ด๋?
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ๋ก๊ทธ๋จ์ด ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด(garbage)๋ฅผ ์ฐพ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ๊ณผ์ ์ด๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ํ๋ก๊ทธ๋จ์ด ์ฅ๊ธฐ๊ฐ ์์ ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ํ๋ค.
์๋ฐ์ GC๋ ์ฃผ๋ก ์ฐธ์กฐ ๊ทธ๋ํ(reference graph)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค. ์ฆ, ๊ฐ์ฒด๋ค์ด ์๋ก ์ฐธ์กฐํ๊ณ ์๋ ๊ด๊ณ๋ฅผ ๋ถ์ํด ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ ์ด์ ๋๋ฌํ ์ ์๋ ์ํ(unreachable)์ ์๋์ง๋ฅผ ํ์ธํ๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ์์ฑ
์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ด๋ จ๋ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์๋ค.
์์ ์ฑ
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ง์์ ์ผ๋ก ์ฌํ์ฉ๋์ด, ์ฅ๊ธฐ ์คํ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ธ๋ค.
์ถ์ํ
๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์์ฑ์ ์ง์คํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด ํ๊ธฐ์ ๊ด๋ จ๋ ๋ก์ง์ ์ง์ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค.
GC๊ฐ Memory Leak์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ ์ด์
GC๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์์ ํ ๋ฐฉ์งํ ์๋ ์์ง๋ง, ๋ช ๊ฐ์ง ์ธก๋ฉด์์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ ์ค๋ค.
1. ๋ถํ์ํ ๊ฐ์ฒด ์๋ ํ์
GC๋ ํ๋ก๊ทธ๋จ์ด ๋ ์ด์ ์ ๊ทผํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ์งํด ํ์ํ๋ค. ์ด๋ ๋ช ์์ ์ผ๋ก ์ฐธ์กฐ๊ฐ ํด์ ๋์ง ์๋๋ผ๋, ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด์ ๋ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ ์ ์๊ฒ ํด์ค๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ GC๋ ๊ฐ์ฒด๋ฅผ ํ์ํ๋ค.
public void someMethod() {
Object obj = new Object(); // ๊ฐ์ฒด ์์ฑ
// ... some operations
obj = null; // ์ฐธ์กฐ ํด์
// GC๋ obj๊ฐ null์ด ๋ ์ดํ ๊ฐ์ฒด๋ฅผ ์๊ฑฐํ ์ ์์
}
2. ๋ฉ๋ชจ๋ฆฌ ๋์ ์ํ
๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฃผ๋ ์์ธ ์ค ํ๋๋ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์ ์ง๋๋ ๊ฒฝ์ฐ์ด๋ค. GC๋ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ถ์ํ์ฌ ์ด๋ค ๊ฐ์ฒด๋ค์ด ๋๋ฌํ ์ ์๋์ง๋ฅผ ํ๋จํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
์๋ฅผ ๋ค์ด, ์คํ ํ๋ ์(stack frame)์์ ๋ฒ์ด๋ ์ง์ญ ๋ณ์(local variable)์ ํ ๋น๋ ๊ฐ์ฒด๋ ๋ ์ด์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ GC์ ๋์์ด ๋๋ค.
3. ์ฝํ ์ฐธ์กฐ(Weak Reference) ์ฌ์ฉ
์๋ฐ๋ ๊ฐํ ์ฐธ์กฐ(strong reference) ์ธ์๋ ์ฝํ ์ฐธ์กฐ(Weak Reference), ๋ถ๋๋ฌ์ด ์ฐธ์กฐ(Soft Reference), ์ ๋ น ์ฐธ์กฐ(Phantom Reference) ๋ฑ์ ์ฐธ์กฐ ํ์ ์ ์ ๊ณตํ๋ค. ์ด๋ฌํ ์ฐธ์กฐ ํ์ ์ GC๊ฐ ๊ฐ์ฒด๋ฅผ ๋ ์ฝ๊ฒ ์์งํ ์ ์ด๋๋ก ๋์์ค๋ค.
์๋ฅผ ๋ค์ด, WeakHashMap์ ์ฝํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํด ํค(key)์ ๋ํ ์ฐธ์กฐ๊ฐ ์ฝํ ์ํ๋ก ์ ์ง๋๋ฉฐ, ๋ ์ด์ ๊ฐํ ์ฐธ์กฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ์ํธ๋ฆฌ๊ฐ ์ ๊ฑฐ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ ์ค๋ค.
Garbage Collection์ ํ๊ณ
Garbage Collection์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์์ ํ ๋ฐฉ์งํ ์๋ ์๋ค.
1. ํ์ฑ ์ฐธ์กฐ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋์
GC๋ ์ฐธ์กฐ๊ฐ ๋จ์ ์๋ ๊ฐ์ฒด๋ ์์งํ์ง ์๋๋ค. ์ฆ, ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋์ง ์๋๋ผ๋, ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฌ์ ํ ์ฐธ์กฐํ๊ณ ์์ผ๋ฉด GC๋ ํด๋น ๊ฐ์ฒด๋ฅผ ํ์ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ ๋ก์ง์์ ๋ถํ์ํ ์ฐธ์กฐ๊ฐ ์ ์ง๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ๋ค์ ์ฝ์ค์์ List์ ๊ณ์ํด์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ์ง๋ง, ๊ทธ ๊ฐ์ฒด๋ค์ด ๋ ์ด์ ํ์ ์์ ๋๋ List์ ๋จ์์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
List<Object> list = new ArrayList<>();
public void addObjects() {
for (int i = 0; i < 1000; i++) {
list.add(new Object()); // ๊ฐ์ฒด๊ฐ ๋ฆฌ์คํธ์ ๊ณ์ ์ถ๊ฐ๋จ
}
}
์ด ๊ฒฝ์ฐ, List๊ฐ ๊ฐ์ฒด๋ค์ ๊ณ์ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ GC๋ ์ด๋ฅผ ์์งํ ์ ์๋ค.
2. ์ํ ์ฐธ์กฐ Circular Reference
์๋ฐ์ GC๋ ์ฐธ์กฐ ๋๋ฌ ๊ฐ๋ฅ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์, ์ํ ์ฐธ์กฐ(circulr reference)๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๋ฐ์ํ์ง ์๋๋ค. ์ด๋ ์๋ฐ์ GC๊ฐ ๊ฐ์ฒด ์ฐธ์กฐ ๊ทธ๋ํ๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ์ฐ๊ฒฐ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ๋๋ฌ ๊ฐ๋ฅ์ฑ์ ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง, ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ํด์ ํ์ง ์๋๋ค๋ฉด ์ํ ์ฐธ์กฐ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์ฌ์ ํ ๋ฌธ์ ์ด๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ต์ ํ์ ํ์์ฑ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด์ ์ต์ ํํด์ผ ํ๋ค. ์ด๋ ๋ถํ์ํ ๊ฐ์ฒด์ ์๋ช ์ ์ค์ด๊ณ , ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ๋ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ์์ ์ ํฌํจํ๋ค. GC๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ํด๊ฒฐํ์ง ์์ผ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ต์ ํ๋ฅผ ์ํ ์ฝ๋ ์์ฑ์ด ์ค์ํ๋ค.
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ ํ(Heap)๊ณผ ๋ฉ์๋ ์์ญ(Method Area)์ผ๋ก ๋๋๋ฉฐ, ํ์ ๋ค์ ์ฌ๋ฌ ์์ญ์ผ๋ก ์ธ๋ถํ๋๋ค.
JVM ํ ์์ญ
1. Young Generation ์ ์ ์ธ๋
- Eden : ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ ๊ณต๊ฐ
- Survovir Space : Eden ์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋ํ๋ ๊ณต๊ฐ. ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ(S0, S1)๋ก ๋๋๋ค.
2. Old Generation ๋ ธ๋ ์ธ๋
- Young Generation์์ ์ฌ๋ฌ ๋ฒ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฑฐ์น๋ฉฐ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋ํ๋ ๊ณต๊ฐ์ด๋ค. ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ธธ์ด์ง๋ ๊ฒฝํฅ์ด ์๋ค.
3. Permanent Generation ์๊ตฌ ์ธ๋(Java 7 ์ดํ)
- JVM ๋ฉํ๋ฐ์ดํฐ์ ํด๋์ค ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค. Java 8 ์ดํ์๋ Metaspace๋ก ๋์ฒด๋์๋ค.
๋ฉ์๋ ์์ญ
๋ฉ์๋ ์์ญ์ JVM ๋ฉํ๋ฐ์ดํฐ ๋ฐ ํด๋์ค ๊ตฌ์กฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ค. Java 8 ์ดํ์๋ Metaspace๋ก ๋์ฒด๋์ด ํ ์์ญ์์ ๋ถ๋ฆฌ๋์ด ๊ด๋ฆฌ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๋ค์ด์ด๊ทธ๋จ
+-------------------------+
| Method Area | <--- (1) Method Area: ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ
|-------------------------|
| +-----------------+ |
| | Young Generation | |
| |-----------------| |
| | Eden Space | | <--- (2a) Eden Space: ์๋ก ์์ฑ๋ ๊ฐ์ฒด ์ ์ฅ
| |-----------------| |
| | Survivor Space 1 | | <--- (2b) Survivor Space: ์ด์๋จ์ ๊ฐ์ฒด ์ ์ฅ
| |-----------------| |
| | Survivor Space 2 | | <--- (2b) Survivor Space: ์ด์๋จ์ ๊ฐ์ฒด ์ ์ฅ
| +-----------------+ |
| Old Generation | <--- (2c) Old Generation: ์ค๋๋ ๊ฐ์ฒด ์ ์ฅ
|-------------------------|
| |
| Stack | <--- (3) Stack: ๋ฉ์๋ ํธ์ถ, ์ง์ญ ๋ณ์, ์คํ ํ๋ ์ ์ ์ฅ
|-------------------------|
| |
| Program Counter | <--- (4) Program Counter Register: ํ์ฌ ์คํ ์ค์ธ ๋ช
๋ น์ด ์์น
| Register |
|-------------------------|
| |
| Native Method Stack | <--- (5) Native Method Stack: ๋ค์ดํฐ๋ธ ๋ฉ์๋์ ํธ์ถ ์คํ
|-------------------------|
๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ
JVM์ ๋ค์ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ํน์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ ์ํฉ์ ์ต์ ํ๋์ด ์๋ค.
1. Mark and Sweep ๋งํฌ ์ฑ ์ค์
Mark and Sweep ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฐฉ์์ด๋ค. ๋ค์์ ๊ทธ ๊ณผ์ ์ด๋ค.
์๋ ์๋ฆฌ
- Mark ๋จ๊ณ : ์ฌ์ฉ ์ค์ธ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ , ๋ชจ๋ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ์ํํ๋ฉด์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋งํฌํ๋ค.
- Sweep ๋จ๊ณ : ๋งํฌ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ค.
์ฅ์
- ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด๋ค
๋จ์
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ(fragmentation) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- GC ๊ณผ์ ์ด ์๋ฃ๋ ๋๊น์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ด ์ค๋จ๋ ์ ์๋ค.
2. Coping Collection ๋ณต์ฌ ์์ง
์๋ ์๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๊ฐ์ ๋ฐ์ชฝ์ผ๋ก ๋๋๊ณ , ํ ์ชฝ์์ ์์ ์ ์ํํ๋ค.
- From Space์์ ์ด์์๋ ๊ฐ์ฒด๋ฅผ To Space๋ก ๋ณต์ฌํ๋ค.
- From Space์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ๊ณ , ์ด์์๋ ๊ฐ์ฒด๋ To Space๋ก ๋ณต์ฌํ๊ณ , ๋๋จธ์ง๋ ์ ๊ฑฐํ๋ค.
์ฅ์
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ์ค์ด๋ ๋ค.
- ์ ์ ์ธ๋(Young Generation)์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
๋จ์
- ๋ฉ๋ชจ๋ฆฌ์ ๋ ๋ฐฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ ํ์ํ๋ค.
3. Generational Garbage Collection ์ธ๋๋ณ ๊ฐ๋น์ง ์ปฌ๋ ์
์๋ ์๋ฆฌ
- ๊ฐ์ฒด๋ฅผ ์์ ์ฃผ๊ธฐ์ ์ฌ์ฉ ๋น๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์ธ๋(Generations)๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค.
- Young Generation: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ , GC๊ฐ ์์ฃผ ์ํ๋๋ค.
- Old Generation: Young Generation์์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ , GC๊ฐ ๋ ์์ฃผ ์ํ๋๋ค.
- Permanent Generation/Metaspace: ํด๋์ค ๋ฉํ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฐํ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ๋ค (JVM์ ์ต์ ๋ฒ์ ์์๋ Metaspace๋ก ๋์ฒด๋จ).
์ฅ์
- ์์ฃผ ๋ฐ์ํ๋ ์์ ๊ฐ์ฒด์ GC ๋น์ฉ์ ์ค์ผ ์ ์๋ค.
๋จ์
- ๊ตฌํ์ด ๋ณต์กํ ์ ์๋ค.
GC ์๊ณ ๋ฆฌ์ฆ์ ์กฐํฉ
JVM์์๋ ์์ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ค. ์ฃผ์ GC ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. Serila GC
์ค๋ช
๋จ์ผ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ Young Generation๊ณผ Old Generation์ GC๋ฅผ ์ํ๋ค.
์ฅ์
๊ฐ๋จํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ ๋ค.
๋จ์
๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ธด GC ์ค๋จ ์๊ฐ์ด ๋ฐ์ํ ์ ์๋ค.
2. Parallel GC
์ค๋ช
์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ Young Generation์ GC๋ฅผ ์ํ๋ค.
์ฅ์
๋ฉํฐ์ฝ์ด ํ๋ก์ธ์์์ ๋ ๋น ๋ฅธ GC ์ฑ๋ฅ์ ์ ๊ณต๋ค.
๋จ์
GC ์ค๋จ ์๊ฐ์ด ๊ธธ ์ ์๋ค.
3. Concurrent Mark-Sweep (CMS) GC
์ค๋ช
Old Generation์ GC๋ฅผ ์ํํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋์์ ์์ ์ ์ํ๋ค.
์ฅ์
GC ์ค๋จ ์๊ฐ์ด ์ค์ด๋ค.
๋จ์
๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
4. G1 (Garbage First) GC
์ค๋ช
์ฌ๋ฌ ๊ฐ์ ์ง์ญ(Region)์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋์ด ๊ด๋ฆฌํ๊ณ , ์ฃผ์ด์ง ๋ชฉํ ์๊ฐ ๋ด์ GC๋ฅผ ์๋ฃํ๋๋ก ์ค๊ณ๋์๋ค.
์ฅ์
๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ์ค์ด๊ณ , ์์ธก ๊ฐ๋ฅํ GC ์ง์ฐ ์๊ฐ์ ์ ๊ณต๋ค.
๋จ์
๊ตฌํ์ด ๋ณต์กํ๊ณ ์ด๊ธฐ ์ค์ ์ด ํ์ํ๋ค.
GC ๊ณผ์ ๋จ๊ณ
Garbage Collection ๊ณผ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋๋ค.
1. Initial Mark (์ด๊ธฐ ๋งํน)
๋ฃจํธ ๊ฐ์ฒด๋ก๋ถํฐ ์์ํ์ฌ Young Generation์ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ๋งํนํ๋ค.
2. Root Scanning (๋ฃจํธ ์ค์บ๋)
๋ฃจํธ ๊ฐ์ฒด์ ๊ทธ ์ฐธ์กฐ๋ฅผ ์ถ์ ํ์ฌ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ๋งํนํ๋ค.
3. Marking (๋งํน)
์ด์์๋ ๊ฐ์ฒด๋ฅผ ๋งํนํ์ฌ GC๊ฐ ํ์ํ ํ์๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ค.
4. Relocation (์ฌ๋ฐฐ์น)
๋ณต์ฌ ์์ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ด์์๋ ๊ฐ์ฒด๋ฅผ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ์ด๋ํ๋ค.
5. Cleanup (์ ๋ฆฌ)
๋งํน๋์ง ์์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๊ณ , ๋น ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์ํ๋ค.
GC ํ๋๊ณผ ๋ชจ๋ํฐ๋ง
GC์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ด๊ธฐ ์ํด ๋ค์ํ ํ๋ ๋งค๊ฐ๋ณ์์ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ํ์ ์ธ GC ํ๋ ํ๋ผ๋ฏธํฐ์๋ ํ ์ฌ์ด์ฆ ์ค์ , GC ์๊ณ ๋ฆฌ์ฆ ์ ํ, ์ค๋ ๋ ์ ์กฐ์ ๋ฑ์ด ์๋ค.
- JVM ์ต์ : -Xms, -Xmx, -XX:+UseG1GC์ ๊ฐ์ ์ต์ ์ ์ฌ์ฉํ์ฌ ํ ์ฌ์ด์ฆ์ GC ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ํ๋ค.
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ: JVisualVM, GC ๋ก๊ทธ ๋ถ์ ๋๊ตฌ, JConsole ๋ฑ์ ์ฌ์ฉํ์ฌ GC ์ฑ๋ฅ๊ณผ ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ชจ๋ํฐ๋งํ๋ค.
ChatGPT ๊ธ์ ์ถ์ฒ
์ ๊ฐ ์ ๊ณตํ ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) ๊ด๋ จ ์ค๋ช ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ ค์ง ์ ๋ณด์ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ด์ฉ์ ์ฌ๋ฌ ์์ค์์ ๊ณตํต์ ์ผ๋ก ๋ค๋ฃจ์ด์ง๋ ๋ด์ฉ์ผ๋ก, ๋ค์๊ณผ ๊ฐ์ ์๋ฃ๋ค์ ์ฐธ๊ณ ํ๋ฉด ์ข์ต๋๋ค:
- Java ๊ณต์ ๋ฌธ์
- Oracle์ ๊ณต์ ๋ฌธ์์์๋ JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์์ธํ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
- Java HotSpot VM Options - JVM ์ต์ ๊ณผ GC ๊ด๋ จ ์ค์
- ์ฑ
- "Java Performance: The Definitive Guide" by Scott Oaks: Java ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๋ฉฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์ฌ๋ ๊น์ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
- "Java: The Complete Reference" by Herbert Schildt: Java์ ๊ธฐ๋ณธ๋ถํฐ ๊ณ ๊ธ ๊ฐ๋ ๊น์ง ํญ๋๊ฒ ๋ค๋ฃจ๋ฉฐ, GC์ ๊ด๋ จ๋ ๋ด์ฉ๋ ํฌํจ๋์ด ์์ต๋๋ค.
- ์จ๋ผ์ธ ์๋ฃ
- Oracle Java Tutorials: Java์ ๊ธฐ๋ณธ ๋ฐ ๊ณ ๊ธ ๊ฐ๋ ์ ์ค๋ช ํ๋ฉฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ณผ ๊ด๋ จ๋ ์๋ฃ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- "Garbage Collection in Java" - ๋ค์ํ ์จ๋ผ์ธ ํํ ๋ฆฌ์ผ๊ณผ ๋ธ๋ก๊ทธ์์ ์ ๊ณตํ๋ ์ค๋ช , ์๋ฅผ ๋ค๋ฉด Baeldung์์๋ GC์ ๋์ ๋ฐฉ์๊ณผ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค.
- JVM ๊ด๋ จ ๋ฌธ์์ ์๋ฃ
- "Inside the Java Virtual Machine" by Bill Venners: JVM์ ๋ด๋ถ ๊ตฌ์กฐ์ GC ๋์ ์๋ฆฌ์ ๋ํ ์์ธํ ์ค๋ช ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ด ์๋ฃ๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ฐ๋ , ์๊ณ ๋ฆฌ์ฆ, JVM์์์ ๋์ ๋ฐฉ์์ ์ดํดํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฉ์ด][Java] ํด๋ก์ (Closure) (0) | 2024.08.19 |
---|---|
[Java] ์์ ํ์ ๊ณผ Wrapper ํด๋์ค๊ฐ ์๋ ์ด์ (0) | 2024.08.19 |
[JVM][GC] ๋ฉ๋ชจ๋ฆฌ ๋จํธํ (0) | 2024.08.19 |
[Java] ์ด๋ ธํ ์ด์ (0) | 2024.08.19 |
[์ฉ์ด] AOP Aspect Oriented Programming (0) | 2024.08.19 |