Skip to content

Latest commit

ย 

History

History
416 lines (233 loc) ยท 16.2 KB

GarbageCollection.md

File metadata and controls

416 lines (233 loc) ยท 16.2 KB

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

์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ(Garbage)๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•ด์ฃผ๋Š” ์ž‘์—…์ด๋‹ค. Java Appliation์€ JVM(Java Virtual Machine)์œ„์—์„œ ๊ตฌ๋™๋˜๋Š”๋ฐ, JVM์˜ ๊ธฐ๋Šฅ ์ค‘ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ฒญ์†Œํ•˜์—ฌย  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ์ž‘์—…์ด๋‹ค.


GC๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š”?

Heap ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ๊ณ„์†ํ•ด์„œ ์Œ“์ด๊ฒŒ๋˜๋ฉด OutOfMemoryException์ด ๋ฐœ์ƒํ•˜์—ฌ, ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ์ œ๊ฑฐํ•ด์ค˜์•ผํ•œ๋‹ค.


์˜ˆ์ œย 

Test test = new Test();
test.setId(1L);
test.setName("seohae");

testRepository.save(test);

test = null; // ๋”์ด์ƒ ์ฐธ์กฐ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ GC์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. 

...


๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ (Garbage Collector)

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ• ๋•Œ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ •๋ฆฌํ•ด์ฃผ๋Š” ์ž‘์—…(Garbage Collection)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด Garbage Collector ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. GC ์ž‘์—…์„ ํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค.


1. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
2. ์‚ฌ์šฉ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ ์ธ์‹
3. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ธ์‹



๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์šฉ์–ด ์ •๋ฆฌ

ํž™ ๋ฉ”๋ชจ๋ฆฌ

IMAGES


1) Stop The World

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ •์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์‹คํ–‰๋˜๋ฉด GC ์ž‘์—…์„ ๋งก์€ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๋Š” ๋ชจ๋‘ ๋ฉˆ์ถ”๊ฒŒ๋˜๊ณ  GC ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๋ฉด ์žฌ๊ฐœ๋œ๋‹ค.


2) Mark

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ผ์‹œ ์ค‘์ง€๋˜๋ฉด GC๋Š” ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋ฅผ ํƒ€๊ณ  ์ด๋™ํ•˜๋ฉฐ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณผ์ •


3) Sweep

๋ชจ๋“  ๊ฐ์ฒด ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ์‹๋ณ„(Mark)๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ์‹œํ‚ค๋Š” ๊ณผ์ •


4) Young

- ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ์ด๋‹ค.

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

- Young ์˜์—ญ์— ๋Œ€ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ Minor GC ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

** Minor GC
Young ์˜์—ญ ์ค‘ Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๊ฒŒ๋˜๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.ย 


5) Old

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

- Old ์˜์—ญ์€ Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ ๊ฐ€๋น„์ง€๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

- ํ•ด๋‹น ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๋ฉด Major GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


6) Eden

- ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๋Š” ์˜์—ญ์ด๋‹ค.

- Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๋ฉด GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ Mark(์ฐธ์กฐ ์—ฌ๋ถ€ ์‹๋ณ„), Sweep(๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ) ๊ณผ์ •์ด ์ผ์–ด๋‚œ๋‹ค.

- ์•„์ง ์‚ฌ์šฉ์ค‘์ธ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ, Eden ์˜์—ญ์€ ๋น„์›Œ์ง„๋‹ค.


7) Survivor

- Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๊ฒŒ ๋˜๋ฉด, GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ์ œ๊ฑฐ๋œ ๊ฐ์ฒด ์™ธ์˜ย ๋‚˜๋จธ์ง€ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

(ํ•œ๋ฒˆ์˜ Minor GC๋ฅผ ๊ฒฝํ—˜ํ•œ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณณ)

- Survivor ๋‘ ์˜์—ญ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๋‹ค. ๋งŒ์•ฝ ๋‘ ์˜์—ญ์— ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋‹ค.

** ์–ด๋–ค ๋œป์ผ๊นŒ?

  1. Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Eden๊ณผ Survivor1์— ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ Survivor2๋กœ ๋ณต์‚ฌํ•œ๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  Survivor1๊ณผ Eden์„ Clearํ•œ๋‹ค.
  3. ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•œ๋ฒˆ์˜ Minor GC์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋งŒ Survivor2์˜์—ญ์— ๋‚จ๋Š”๋‹ค.
    > 4)ย ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๋ฒˆ Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ Eden๊ณผ ย Survivor2์˜์—ญ์—์„œ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ Survivor1๋กœ ๋ณต์‚ฌํ•˜๊ณ  ํด๋ฆฌ์–ดํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Survivor1์—๋งŒ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๋‚จ๊ฒŒ๋œ๋‹ค.
    > 4)ย ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต์ ์œผ๋กœ Survivor1, Survivor2๋ฅผ ์™”๋‹ค๊ฐ”๋‹คํ•˜๋‹ค๊ฐ€, Survivor ์˜์—ญ์—์„œ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.ย 

- promotion ๊ณผ์ •์ด ๋ฐœ์ƒํ•œ๋‹ค.

** promotion
๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ 2๊ฐœ์˜ Survivor ์˜์—ญ์„ ์ด๋™ํ•˜๋ฉด์„œ, ํŠน์ •ย ageย ๊ฐ’์„ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐย Old Generation์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

** age
๊ฐ์ฒด๋“ค์ด ์‚ด์•„๋‚ ๋•Œ๋งˆ๋‹ค age๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.


Survivor ์˜์—ญ์€ ์™œ 2๊ฐœ์ผ๊นŒ?

๋ฉ”๋ชจ๋ฆฌ์˜ ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ž€, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋‚จ์ง€๋งŒ ํŒŒํŽธํ™”๋˜์–ด์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‘๊ฐœ์˜ Survivor ๋ผ๋ฆฌ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ ์ด๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.


8) Permanent

-ย Permanent ์˜์—ญ์€ Java8๋ถ€ํ„ฐ๋Š” ์‚ฌ๋ผ์ง€๊ณ , Mataspace ์˜์—ญ์œผ๋กœ ์ „ํ™˜๋˜์—ˆ๋‹ค.

- ๊ด€๋ จ ์ •๋ณด ์ฐธ๊ณ  : https://johngrib.github.io/wiki/java8-why-permgen-removed/



GC ์ข…๋ฅ˜

Minor GC

  1. ์ž๋ฐ” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ฒ˜์Œ์— Eden ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
  2. ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” Minor GC๊ฐ€ ๋ฐœ์ƒํ• ๋•Œ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
  3. Survivor ์˜์—ญ์€ Survivor1, Survivor2 ๋‘ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ง€๋Š”๋ฐ, Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Eden๊ณผ Survivor1์— ํ™œ์„ฑ ๊ฐ์ฒด๋ฅผ Survivor2๋กœ ๋ณต์‚ฌํ•œ๋‹ค.
    > -> Survivor ๋‘ ์˜์—ญ์ค‘์— ๋ฐ˜๋“œ์‹œ 1๊ฐœ์˜ ์˜์—ญ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘˜ ์ค‘ 1๊ฐœ์˜ Survivor ์˜์—ญ์€ ๋ฐ˜๋“œ์‹œ ๋นˆ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.ย 
  4. ํ™œ์„ฑ์ด ์•„๋‹Œ ๊ฐ์ฒด(GC ๋Œ€์ƒ)๋Š” Survivor1์— ๋‚จ์•„์žˆ๊ฒŒ ๋˜๊ณ , Survivor1 ๊ณผ Eden ์˜์—ญ์„ ํด๋ฆฌ์–ดํ•œ๋‹ค.ย 
  5. 1)~4)๋ฒˆ์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ Survivor ์˜์—ญ์—์„œ ์˜ค๋ž˜๋œ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์˜ฎ๊ธฐ๊ฒŒ๋œ๋‹ค.

- ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

- ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝœ๋ ‰ํŒ…ํ•˜๋Š”๋ฐ ์•„์ฃผ ํšจ๊ณผ์ ์ด๋‹ค.

- Stop The World ๋ฐฉ์‹์ด๋ฉฐ, Stop The World ์‹œ๊ฐ„์ด ์งง๋‹ค.


Major GC

-ย Oldย ์˜์—ญ์ดย ๊ฐ€๋“์ฐจ๋ฉดย ๋ฐœ์ƒํ•œ๋‹ค.
-ย Minorย GCย ๊ณผ์ •์—์„œย ์‚ญ์ œ๋˜์ง€ย ์•Š๊ณ ,ย Oldย Generationย ์˜์—ญ์œผ๋กœย ์˜ฎ๊ฒจ์ง„ย ๊ฐ์ฒดย ์ค‘ย ๋ฏธ์‚ฌ์šฉ๋œ๋‹ค๊ณ ย ํŒ๋‹จ๋˜๋Š”ย ๊ฐ์ฒด๋ฅผย ์‚ญ์ œํ•˜๋Š”ย GC๋‹ค.

- Stop The World ๋ฐฉ์‹์ด๋ฉฐ, Stop The World ์‹œ๊ฐ„์ด ๊ธธ๋‹ค.

IMAGES


๋Œ€ํ‘œ์ ์œผ๋กœ Mark & Sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

  1. GC Root๋กœ๋ถ€ํ„ฐ ๋ชจ๋“ ย ๊ฐ์ฒด๋“ค์˜ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ์ฐธ์กฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ Mark ํ•œ๋‹ค.
  2. 1)๋ฒˆ์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•˜๊ณ  ์ด ํ‘œ์‹œ๋œ ๊ฐ์ฒด๋ฅผ Sweep ํ•œ๋‹ค.

** GC Root๋ž€?
Runtime Data Area์—์„œ Method Area, Native Stack(JNI), Java Stack ๋“ฑ์—์„œ Heap ๋ฉ”๋ชจ๋ฆฌ์˜ Object๋“ค์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ

IMAGES


Full GC

-ย Heapย ๋ฉ”๋ชจ๋ฆฌย ์ „์ฒดย ์˜์—ญ์—์„œย ๋ฐœ์ƒํ•œ๋‹ค.
- Old, Young ์˜์—ญ ๋ชจ๋‘์—์„œ ๋ฐœ์ƒํ•˜๋Š” GC์ด๋‹ค.
- Minor GC, Major GC ๋ชจ๋‘ ์‹คํŒจํ–ˆ๊ฑฐ๋‚˜, Young ์˜์—ญ์™€ Old ์˜์—ญ ๋ชจ๋‘ ๊ฐ€๋“ ์ฐผ์„๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

IMAGES


๋Œ€ํ‘œ์ ์œผ๋กœ Mark & Sweep & Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

  1. ์ „์ฒด ๊ฐ์ฒด๋“ค์˜ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ์ฐธ์กฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ Mark ํ•œ๋‹ค.
  2. 1)๋ฒˆ์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•˜๊ณ  ์ด ํ‘œ์‹œ๋œ ๊ฐ์ฒด๋ฅผ Sweep ํ•œ๋‹ค.
  3. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.ย 

- ์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๋‹ค.

- Full GC๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๋„์ค‘์—๋Š” ์ˆœ๊ฐ„์ ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์— ํฐ ์˜ํ–ฅ์„ ์ค€๋‹ค.


MinorGC ์™€ MajorGC๋กœ ๊ตฌ๋ถ„๋˜๋Š” ์ด์œ ๋Š”?

JVM์€ Heap ์˜์—ญ์„ ์„ค๊ณ„ํ• ๋•Œ ์•Œ๊ฐœ 2๊ฐ€์ง€ ์ „์ œ์กฐ๊ฑด์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ๋“œ๋ฌผ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

๊ฐ์ฒด๋Š” ์ผํšŒ์„ฑ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋ž˜ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— young, old ์˜์—ญ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค๊ณ„ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” MinorGC, Old ์˜์—ญ์ด ๊ฐ€๋“ ์ฐฐ๋•Œ ๋ฐœ์ƒํ•˜์—ฌ ๋น„๊ต์  ์ ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” Major GC๋กœ ๋‚˜๋ˆ ์ ธ์„œ ๋ฐœ์ƒํ•œ๋‹ค.



GC ์ข…๋ฅ˜

- JVM ๋ฒ„์ „์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ GC ๋ฐฉ์‹์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฐœ์ „๋œ๋‹ค.
- ์‚ฌ์šฉ์ž๊ฐ€ JVM ์˜ต์…˜ ์„ค์ •์„ ํ†ตํ•ด GC ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.


1) Serial Garbage Collector

- ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ์‹์˜ GC๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(์Šค๋ ˆ๋“œ 1๊ฐœ)๋กœ ๋™์ž‘ํ•œ๋‹ค.

- ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•˜์—ฌ ๋Š๋ฆฌ๊ณ , ๊ทธ๋งŒํผย Stop The Worldย ์‹œ๊ฐ„์ด ๋‹ค๋ฅธ GC์— ๋น„ํ•ด ๊ธธ๋‹ค.


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

- Mark : Old ์˜์—ญ์—์„œ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
- Sweep : ๋ชจ๋“  ๊ฐ์ฒด ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ์‹๋ณ„(Mark)๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ์‹œํ‚จ๋‹ค.
- Compaction : ๊ฐ ๊ฐ์ฒด๋“ค์ด ์—ฐ์†๋˜๊ฒŒ ์Œ“์ด๋„๋ก Heap์˜ ๊ฐ€์žฅ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฑ„์›Œ์„œ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

IMAGES

- Compaction ํ›„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด, ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์ ธ์žˆ๋‹ค.ย  ์ฆ‰, Compaction์€ ํ•„์š” ์—†๋Š” ๊ฐ์ฒด๋“ค์„ ์ง€์šฐ๊ณ  ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ ๊ณณ์œผ๋กœ ๋ชจ์€๋‹ค

IMAGES


2) Parallel Collector(=Throughput Collector)

- Java 8์˜ default GC ์ด๋‹ค.

- Young ์˜์—ญ์˜ GC๋ฅผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ, Serial GC์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ Stop The World ๊ฐ€ ์งง๋‹ค.

- ๊ทธ๋ฆผ์— ๋ณด์ด๋“ฏ, GC Thread ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ด๋‹ค. GC ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ณ  Stop The World ์‹œ๊ฐ„์„ ์ข€๋” ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ๋˜์—ˆ๋‹ค.

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

IMAGES


3) Parallel Old GC

- ์œ„ 2) Parallel GC ์—์„œ ์กฐ๊ธˆ ๋” ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ๋ฒ„์ „์ด๋‹ค. Old GC๋„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

- Mark & Summary & Compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.


Mark & Summary & Compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜

IMAGES

  1. Mark : Old Generation์„ Region์ด๋ผ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๊ท ์ผํ•˜๊ฒŒ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์Šค๋ ˆ๋“œ๋“ค์„ Region ๋ณ„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

  2. Summary
    > - region๋ณ„ ํ†ต๊ณ„์ •๋ณด๋กœ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์˜ ๋ฐ€๋„๊ฐ€ ๋†’์€ ๋ถ€๋ถ„์ด ์–ด๋””๊นŒ์ง€์ธ์ง€ dense prefix๋ฅผ ์ •ํ•œ๋‹ค.
    > - ์˜ค๋žœ ๊ธฐ๊ฐ„ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋Š” ์•ž์œผ๋กœ ์‚ฌ์šฉํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค๋Š” ๊ฐ€์ • ํ•˜์—ย dense prefix๋ฅผ ๊ธฐ์ค€์œผ๋กœย compact ์˜์—ญ์„ ์ค„์ธ๋‹ค.

  3. Compaction : destination๊ณผ source๋กœ ๋‚˜๋ˆ„์–ด, ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” destination์œผ๋กœ ์ด๋™์‹œํ‚ค๊ณ  ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋Š” ์ œ๊ฑฐํ•œ๋‹ค.

- Old GC ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋Š˜๋ ค์ฃผ๊ธฐ์œ„ํ•œ Summary ์ž‘์—…์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.


4) CMS Collector (Concurrent Mark-Sweep)

- Stop The World๋กœ Java Application์ด ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ์„ ์ค„์ด๊ณ ์ž ๋งŒ๋“  GC ์ด๋‹ค.

- Young ์˜์—ญ์€ ์œ„ 3) Parallel GC ์™€ ๋™์ผํ•˜๋‹ค.

- Old ์˜์—ญ์€ Reacable ํ•œ ๊ฐ์ฒด๋ฅผ ํ•œ๋ฒˆ์— ์ฐพ์ง€ ์•Š๊ณ  ๋‚˜๋ˆ ์„œ ์ฐพ๋Š” ์•„๋ž˜ 1)~4)๋‹จ๊ณ„์˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.


Old ์˜์—ญ์˜ GC ๊ณผ์ •

  1. Initial Mark : GC Root๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๋งŒ ๋งˆํ‚นํ•œ๋‹ค. (stop-the-world ๋ฐœ์ƒํ•˜์ง€๋งŒ, ํƒ์ƒ‰ ๊นŠ์ด๊ฐ€ ์–•์•„์„œ ๋ฐœ์ƒ ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง๋‹ค.)
  2. Concurrent Mark : stop-the-worldย  ์—†์ด ์ง„ํ–‰๋œ๋‹ค. ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ, ์ง€์†์ ์œผ๋กœ ๋งˆํ‚นํ•œ๋‹ค.ย 
  3. Remark : Concurrent Mark ๊ณผ์ •์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์ด ์—†๋Š”์ง€ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋งˆํ‚นํ•˜๋ฉฐ ํ™•์ •ํ•œ๋‹ค. (stop-the-world ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด ์ง€์†์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ ๊ฒ€์ฆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.)
  4. Concurrent Sweep : stop-the-world ์—†์ด ์ง„ํ–‰๋œ๋‹ค.ย ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด stop-the-world์˜ ๋ฐœ์ƒ ์‹œ๊ฐ„์„ ์ตœ์†Œํ•œ์œผ๋กœ ํ•œ๋‹ค.

IMAGES

IMAGES

- Compacting ํ•˜์ง€ ์•Š๋Š”๋‹ค.

IMAGES


5) G1 Collector (Garbage First)

- Java9 ์ด์ƒ์˜ default GC ์ด๋‹ค.

- ํ˜„์žฌ GC ์ค‘ stop-the-world์˜ ์‹œ๊ฐ„์ด ์ œ์ผ ์งง๋‹ค.

- CMS GC ๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ๋งŒ๋“  GC๋กœ ์œ„์—์„œ ์‚ดํŽด๋ณธ GC์™€๋Š” ๋‹ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )

- Heap์„ Region ์ด๋ผ๋Š” ์ผ์ •ํ•œ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

- ์ „์ฒด Heap์— ๋Œ€ํ•ด์„œ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋ถ€๋ถ„์ ์œผ๋กœ Region ๋‹จ์œ„๋กœ ํƒ์ƒ‰ํ•˜์—ฌ, ๊ฐ๊ฐ์˜ Region์—๋งŒ GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

- Young ์˜์—ญ๊ณผ Old ์˜์—ญ์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋‰˜์–ด์žˆ์ง€ ์•Š๊ณ , ํ•ด๋‹น ์˜์—ญ์˜ ๊ฐ์ฒด๋“ค์„ Region ์ด๋ผ๋Š” ๊ตฌ์—ญ์— ํ• ๋‹นํ•œ๋‹ค.

๊ฐ ์ง€์—ญ์„ ์—ญํ• ๊ณผ ํ•จ๊ป˜ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ถ„(Eden ์˜์—ญ์ธ์ง€, Survivor ์˜์—ญ์ธ์ง€, Old ์˜์—ญ์ธ์ง€)ํ•˜์—ฌ, ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

IMAGES

- ๊ฐœ์„ ํ•˜์—ฌ ๋งŒ๋“  GC๋กœ ์œ„์—์„œ ์‚ดํŽด๋ณธ GC์™€๋Š” ๋‹ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )

IMAGES



GC์˜ ๋™์ž‘ ๋ฐฉ์‹

1.ย ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ Eden ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.

IMAGES

2.ย Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.

IMAGES

3.ย Mark ๊ณผ์ •์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ Survivor0 ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌํ•˜๊ณ , Eden ์˜์—ญ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์‚ญ์ œํ•œ๋‹ค.

IMAGES

4.ย ๊ทธ ๋‹ค์Œ Minor GC๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ๋Š”, Eden์˜์—ญ๊ณผ Survivor0 ์˜์—ญ์„ ๋ชจ๋‘ markํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ Survivor1 ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌํ•˜๊ณ ,ย Eden ์˜์—ญ๊ณผ, Survivor0 ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

IMAGES

5.ย ํŠน์ • age์— ๋„๋‹ฌํ•œ ๊ฐ์ฒด๋“ค์€ Old generation ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. Young generation์—์„œ Old generation์œผ๋กœ ์˜ฎ๊ฒจ์ง€๋Š” ํ˜„์ƒ์„ promotion ์ด๋ผํ•œ๋‹ค.

IMAGES



Q&A


Major GC์™€ Full GC๋ฅผ ํ—ท๊ฐˆ๋ ธ๋˜ ์ด์œ ๋Š”?

  • ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋ณด๋‹ค๋ณด๋ฉด Major GC (Full GC) ์ด๋Ÿฐ์‹์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ์จ๋†“์€ ๊ธ€์ด ๋งŽ์€๋ฐ, ์ƒ๊ฐํ•ด๋ดค์„๋•Œ ์ด์œ ๋Š” ๋ชจ๋‘ Old ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” GC ์„ค๋ช…์‹œ์— ๋ณด์—ฌ์ง€๋Š”๋ฐ, ๋‘๊ฐœ GC ๋ชจ๋‘ Old ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๊ฒƒ ๊ฐ™๋‹ค. ๊ฐ ํŠน์ง•์€ ์œ„์— ๋‹ค์‹œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋ ๊ฒƒ๊ฐ™๋‹ค.

Survivor ์˜์—ญ์ด 2๊ฐœ์ธ ์ด์œ ?

  • ๋ฉ”๋ชจ๋ฆฌ์˜ ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ž€, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋‚จ์ง€๋งŒ ํŒŒํŽธํ™”๋˜์–ด์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‘๊ฐœ์˜ Survivor ๋ผ๋ฆฌ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ ์ด๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

MinorGC ์™€ MajorGC๋กœ ๊ตฌ๋ถ„๋˜๋Š” ์ด์œ ๋Š”?

  • JVM์€ Heap ์˜์—ญ์„ ์„ค๊ณ„ํ• ๋•Œ ์•Œ๊ฐœ 2๊ฐ€์ง€ ์ „์ œ์กฐ๊ฑด์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค.
  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ๋“œ๋ฌผ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

๊ฐ์ฒด๋Š” ์ผํšŒ์„ฑ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋ž˜ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— young, old ์˜์—ญ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค๊ณ„ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” MinorGC, Old ์˜์—ญ์ด ๊ฐ€๋“ ์ฐฐ๋•Œ ๋ฐœ์ƒํ•˜์—ฌ ๋น„๊ต์  ์ ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” Major GC๋กœ ๋‚˜๋ˆ ์ ธ์„œ ๋ฐœ์ƒํ•œ๋‹ค.



Reference

https://steemit.com/kr/@parkjp/java-garbage-collection-gc

https://spurdev.tistory.com/10

https://blog.metafor.kr/163

https://lemonlemon.tistory.com/175

https://mangkyu.tistory.com/118

https://jonny-cho.github.io/java/2021/06/01/garbage-collection/

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kbh3983&logNo=220967456151

https://velog.io/@jsj3282/17.-%EB%8F%84%EB%8C%80%EC%B2%B4-GC%EB%8A%94-%EC%96%B8%EC%A0%9C-%EB%B0%9C%EC%83%9D%ED%95%A0%EA%B9%8C

https://memostack.tistory.com/229

https://devhyeon0312.tistory.com/17