GC(with Java Heap) - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

Heap์ด๋ž€

  • ์ธ์Šคํ„ด์Šค์™€ ๋ฐฐ์—ด์ด ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„.

  • ์ƒ์„ฑ์— ํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค์™€ ๋ฐฐ์—ด์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋Š” Heap ๋‚ด์˜ Method Area์—์„œ ์–ป์–ด์˜จ๋‹ค.

  • ๋ชจ๋“  Thread๊ฐ€ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Garbage Collection์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์˜์—ญ.

  • ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ์˜คํžˆ๋ ค ๋ถ€์ž‘์šฉ๋งŒ ๋‚ณ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํผ. GC์— ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

Heap ๊ตฌ์„ฑ

Java 8 ์ด์ „
Java 8 ์ด์ „์—๋Š” Metaspace๋ผ๊ณ  ์ง€์นญ๋œ ์˜์—ญ ๋Œ€์‹ ์— PermGen(Permanat Generation Space)๋ผ๊ณ  
๋ถˆ๋ฆฌ๋Š” ์˜์—ญ์ด ์กด์žฌํ–ˆ์—ˆ๋‹ค. ์ด ์˜์—ญ์€ ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€ ์ •๋ณด์™€ GC์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค, ๊ทธ๋ฆฌ๊ณ  
static ๋ณ€์ˆ˜๋“ค์˜ '๊ฐ’'์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋ฉด, Method Area์™€ ์—ญํ• ์ด ๋™์ผํ•ด๋ณด์ธ๋‹ค. 
์‚ฌ์‹ค Method Area๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ(logicaly) PermGen ์•ˆ์— ํฌํ•จ๋œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  JVM์„ ์‹คํ–‰ํ•  ๋•Œ, -XX:PermSize : ์ดˆ๊ธฐ Perm size -XX:MaxPermSize : ์ตœ๋Œ€ Perm size
์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด PermGen์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 
(์•„๋งˆ Method Area์˜ ํฌ๊ธฐ๋„ ํŠน์ •ํ•œ ๋น„์œจ๋กœ ๊ฐ™์ด ์กฐ์ ˆ๋˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค)

๋˜ํ•œ Heap์ฒ˜๋Ÿผ PermGen๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
- Exception in thread โ€œmainโ€: java.lang.OutOfMemoryError: Java heap spac
- Exception in thread โ€œmainโ€: java.lang.OutOfMemoryError: PermGen space
Java 8 ์ดํ›„ 
PermGen ์˜์—ญ์ด ์‚ฌ๋ผ์กŒ๋‹ค. ๊ทธ๋ฆฌ๊ณ  PermGen์ด ๋‹ด๋‹นํ•˜๋˜ ์—ญํ• ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌํ–ˆ๋‹ค. 
- ์ˆ˜์ •๋  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ(static Object๋‚˜ ์ƒ์ˆ˜ํ™”๋œ String Object)
- ์ˆ˜์ •๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ(class, method ๋“ฑ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)

์ˆ˜์ •๋  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” Heap์œผ๋กœ ์˜ฎ๊ฒจ ์ตœ๋Œ€ํ•œ GC์˜ ๋Œ€์ƒ์ด ๋˜๋„๋ก ํ–ˆ๊ณ  
์ˆ˜์ •๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” OS๊ฐ€ Native Memory์—์„œ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋„๋ก ์œ„์ž„ํ–ˆ๋‹ค. 
์ด Memory Area๋ฅผ Metaspace๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด ๋ณ€ํ™”๋Š” PermGen์˜์—ญ์˜ size ์ œํ•œ์„ 
์—†์• ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค. Metaspace๊ฐ€ Native memory์— ์œ„์น˜ํ•จ์œผ๋กœ์จ 
๊ฐœ๋ฐœ์ž๋Š” ์˜์—ญ ํ™•๋ณด์˜ ์ƒํ•œ์„ ํฌ๊ฒŒ ์˜์‹ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

Heap์˜ ์ž์„ธํ•œ ๊ตฌ์„ฑ์€ ์•„๋ž˜ GC์˜ ๋™์ž‘์„ ์ดํ•ดํ•˜๋ฉด ๋”์šฑ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Garbage Collection

  • ๊ฐœ๋ฐœ์ž๋Š” Heap์„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์€ GC๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๋™์œผ๋กœ

๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด GC์˜ ๊ธฐ๋ณธ ๊ฐœ๋….

  • Heap์˜ ์ธ์Šคํ„ด์Šค ์ค‘ Thead์˜ JVM stack์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค(Unreachable)์ด GC์˜ ๋Œ€์ƒ.

์ค‘์š”ํ•œ๊ฑด, ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ๋“ค์„ pick ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์„ pickํ•œ ํ›„ ๋‚˜๋จธ์ง€๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

์ด ๋ฐฉ์‹์„ Mark and Sweep ์ด๋ผ๊ณ  ํ•œ๋‹ค.

Mark
GC๊ฐ€ JVM stack์˜ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ๊ฐ๊ฐ์ด ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋–ค ์ธ์Šคํ„ด์Šค๋ฅผ 
์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฐพ์Œ. ๋ฐœ๊ฒฌ๋œ ์ธ์Šคํ„ด์Šค ๋˜ํ•œ ์–ด๋–ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฐพ์Œ.
์ด ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋ฉด ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์ค‘๋‹จ๋˜๋Š”๋ฐ, ์ด๋ฅผ 'stop the world'๋ผ๊ณ  ๋ถ€๋ฆ„
(System.gc() ํ˜ธ์ถœ์„ ๊ฐ€๋ณ๊ฒŒ ๋ณด๋ฉด ์•ˆ๋ ๊ฒƒ)
Sweep
Mark๋˜์ง€ ์•Š์€ ์ธ์Šคํ„ด์Šค๋“ค์„ ์ œ๊ฑฐ

Garbage Collection ์‹คํ–‰ ๊ณผ์ •(with Heap Memory)

Young Generation

- Eden 
์ธ์Šคํ„ด์Šค๋“ค์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„. ์ด ์˜์—ญ์ด ๊ฐ€๋“์ฐจ๊ฒŒ ๋˜๋ฉด Reachable ์ธ์Šคํ„ด์Šค๋“ค์€ 
Survivor 0 ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. ์ด๋ฅผ MinorGC๋ผ๊ณ  ํ•œ๋‹ค. 
๋ฐ˜๋ฉด Unreachable ์ธ์Šคํ„ด์Šค๋“ค์€ MinorGC๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‚ญ์ œ๋œ๋‹ค.

- Survivor 0 
MinorGC๊ฐ€ ํ•œ๋ฒˆ ๋ฐœ์ƒํ•œ ๋’ค ๋‘๋ฒˆ์งธ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด์— Survivor 0์— ์žˆ์—ˆ๋˜ ์ธ์Šคํ„ด์Šค ์ค‘ 
Reachable ์ธ์Šคํ„ด์Šค๋“ค์€ Survivor 1๋กœ ์˜ฎ๊ฒจ์ง€๊ณ Unreachable ์ธ์Šคํ„ด์Šค๋“ค์€ ์‚ญ์ œ๋œ๋‹ค. 
์˜ฎ๊ฒจ์งˆ ๋•Œ ๊ฐ ์ธ์Šคํ„ด์Šค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณ ์œ ์˜ age๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

- Survivor 1
MinorGC๊ฐ€ ์„ธ๋ฒˆ ์งธ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด Survivor 1์— ์žˆ์—ˆ๋˜ ์ธ์Šคํ„ด์Šค๋“ค์ด ๋‹ค์‹œ Survivor 0๋กœ 
์˜ฎ๊ฒจ์ง€๊ณ  ์‚ญ์ œ๋œ๋‹ค. ์ด๋•Œ๋„ ๊ฐ age๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ์ธ์Šคํ„ด์Šค๋“ค์ด Survivor 0 <-> Survivor 1 ์ด๋™์„ 
๋ฐ˜๋ณตํ•˜๊ณ , ๊ฐ age๊ฐ’๋“ค์ด ํŠน์ • ๊ธฐ์ค€์„ ๋„˜์–ด์„œ๋ฉด ๊ทธ ์ธ์Šคํ„ด์Šค๋“ค์€ Old Generation์œผ๋กœ ์ด๋™ํ•œ๋‹ค. 
์ด๋ฅผ Promotion ๋‹จ๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.
- Old Generation
Promotion ๋‹จ๊ณ„๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด์„œ Old Generation์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด MajorGC๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค