uncategorized

Java Garbage Collection

date: 2018-12-11 14:17:31

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ณผ์ • - Generational Garbage Collection

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐ€์„ค ํ•˜์— ๋งŒ๋“ค์–ด์กŒ๋‹ค

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ(unreachable)๊ฐ€ ๋œ๋‹ค.
  • ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ€์„ค์„ โ€˜weak generational hypothesisโ€™๋ผ ํ•œ๋‹ค.

์ด ๊ฐ€์„ค์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ HotSpot VM์—์„œ๋Š” ํฌ๊ฒŒ 2๊ฐœ๋กœ ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„์—ˆ๋‹ค.
๋‘˜๋กœ ๋‚˜๋ˆˆ ๊ณต๊ฐ„์ด Young ์˜์—ญ๊ณผ Old ์˜์—ญ์ด๋‹ค.

  • Young ์˜์—ญ(Yong Generation ์˜์—ญ):
    ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ์œ„์น˜ํ•œ๋‹ค.
    ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ young ์˜์—ญ์—
    ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
    ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ๋•Œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

  • Old ์˜์—ญ(Old Generation ์˜์—ญ):
    ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ๋˜์ง€ ์•Š์•„ Young ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์—ฌ๊ธฐ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.
    ๋Œ€๋ถ€๋ถ„ Young์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹นํ•˜๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ Young ์˜์—ญ๋ณด๋‹ค GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
    ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC(ํ˜น์€ Full GC)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

  • Permanent Generation ์˜์—ญ(์ดํ•˜ Perm ์˜์—ญ)
    Method Area(๋ฉ”์†Œ๋“œ ์˜์—ญ)๋ผ๊ณ ๋„ ํ•œ๋‹ค.
    ๊ฐ์ฒด๋‚˜ ์–ต๋ฅ˜(intern)๋œ ๋ฌธ์ž์—ด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์ด๋ฉฐ, Old ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์˜์›ํžˆ ๋‚จ์•„ ์žˆ๋Š”๊ณณ์€ ์ ˆ๋Œ€ ์•„๋‹ˆ๋‹ค.
    ์ด ์˜์—ญ์—์„œ GC๊ฐ€ ๋ฐœ์ƒํ• ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ GC๊ฐ€ ๋ฐœ์ƒํ•ด๋„ Major GC์˜ ํšŸ์ˆ˜์— ํฌํ•จ๋œ๋‹ค.

โ€œOld ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ๋•Œ์—๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ ๊นŒ?โ€
์นด๋“œ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๊ณ  ์นด๋“œ ํ…Œ์ด๋ธ”์—๋Š” Old์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋งˆ๋‹ค ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
Young์˜์—ญ์˜ GC๋ฅผ ์‹คํ–‰ํ• ๋•Œ๋Š” Old์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , ์นด๋“œ ํ…Œ์ด๋ธ”๋งŒ ๋’ค์ ธ์„œ GC ๋Œ€์ƒ์ธ์ง€ ์‹๋ณ„ํ•œ๋‹ค.
์นด๋“œ ํ…Œ์ด๋ธ”์€ write barrier๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค

Young ์˜์—ญ์˜ ๊ตฌ์„ฑ

3๊ฐœ๋กœ ๋‚˜๋‰จ

  • Eden ์˜์—ญ
  • Survivor ์˜์—ญ 2๊ฐœ

์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  • ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์— ์œ„์น˜ํ•œ๋‹ค.
  • Eden ์˜์—ญ์—์„œ GC๊ฐ€ ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•œ ํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™๋œ๋‹ค.
  • Eden ์˜์—ญ์—์„œ GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฏธ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” Survivor ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์Œ“์ธ๋‹ค.
  • ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด ๊ทธ ์ค‘์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋“ ์ฐฌ Survivor ์˜์—ญ์€ ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์—†๋Š” ์ƒํƒœ๋กœ ๋œ๋‹ค.
  • ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์•„ ์žˆ๋Š” ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

HotSpot VM์—์„œ๋Š” ๋ณด๋‹ค ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์œ„ํ•ด์„œ ๋‘ ๊ฐ€์ง€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค

  • bump-the-pointer
  • TLABs(Thread-Local Allocation Buffers)

Old ์˜์—ญ์— ๋Œ€ํ•œ GC

GC ๋ฐฉ์‹์€ JDK 7์„ ๊ธฐ์ค€์œผ๋กœ 5๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

  • Serial GC : ์šด์˜ ์„œ๋ฒ„์—์„œ ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๋ฐฉ์‹์ด Serial GC๋‹ค. Serial GC๋Š” ๋ฐ์Šคํฌํ†ฑ์˜ CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ๋ฐฉ์‹์ด๋‹ค. Serial GC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์ง„๋‹ค.
  • Parallel GC
  • Parallel Old GC(Parallel Compacting GC)
  • Concurrent Mark & Sweep GC(์ดํ•˜ CMS)
  • G1(Garbage First) GC

Serial GC (-XX:+UseSerialGC)

Young ์˜์—ญ์—์„œ์˜ GC๋Š” ์•ž ์ ˆ์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.(Young ์˜์—ญ์˜ GC๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์—๋Š” Old ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , ์ด ์นด๋“œ ํ…Œ์ด๋ธ”๋งŒ ๋’ค์ ธ์„œ GC ๋Œ€์ƒ์ธ์ง€ ์‹๋ณ„ํ•œ๋‹ค.)
Old ์˜์—ญ์˜ GC๋Š” mark-sweep-compact์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
mark : Old ์˜์—ญ์— ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„
sweep : ํž™(heap)์˜ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ํ™•์ธํ•˜์—ฌ ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ๋งŒ ๋‚จ๊ธด๋‹ค
compaction : ๊ฐ ๊ฐ์ฒด๋“ค์ด ์—ฐ์†๋˜๊ฒŒ ์Œ“์ด๋„๋ก ํž™์˜ ๊ฐ€์žฅ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฑ„์›Œ์„œ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค

Parallel GC (-XX:+UseParallelGC)

Serial GC์™€ ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ™๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Serial GC๋Š” GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒƒ์— ๋น„ํ•ด, Parallel GC๋Š” GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋‹ค.
Parallel GC๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๊ณ  ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌํ•˜๋‹ค.
Throughput GC

Parallel Old GC(-XX:+UseParallelOldGC)

Parallel Old GC๋Š” JDK 5 update 6๋ถ€ํ„ฐ ์ œ๊ณตํ•œ GC ๋ฐฉ์‹
Parallel GC์™€ ๋น„๊ตํ•˜์—ฌ Old ์˜์—ญ์˜ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ๋‹ค๋ฅด๋‹ค
Mark-Summary-Compaction
Summary : ์•ž์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ๋ณ„๋„๋กœ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.

CMS GC (-XX:+UseConcMarkSweepGC)


์ดˆ๊ธฐ Initial Mark ๋‹จ๊ณ„์—์„œ๋Š” โ€ฆ.ํด๋ž˜์Šค ๋กœ๋”์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ์ฒด ์ค‘ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚ธ๋‹ค.
๋”ฐ๋ผ์„œ, ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์€ ๋งค์šฐ ์งง๋‹ค.
๊ทธ๋ฆฌ๊ณ  Concurrent Mark ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐฉ๊ธˆ ์‚ด์•„์žˆ๋‹ค๊ณ  ํ™•์ธํ•œ ๊ฐ์ฒด์—์„œ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ํ™•์ธํ•œ๋‹ค.
์ด ๋‹จ๊ณ„์˜ ํŠน์ง•์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ ๋‹ค์Œ Remark ๋‹จ๊ณ„์—์„œ๋Š”โ€ฆ. Concurrent Mark ๋‹จ๊ณ„์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๊ฐ€ ๋Š๊ธด ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•œ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ Concurrent Sweep ๋‹จ๊ณ„์—์„œ๋Š” ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.
์ด ์ž‘์—…๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ง„ํ–‰ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋˜๋Š” GC ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— stop-the-world ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง๋‹ค.
๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•  ๋•Œ CMS GC๋ฅผ ์‚ฌ์šฉ
Low Latency GC๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ CMS GC๋Š” stop-the-world ์‹œ๊ฐ„์ด ์งง๋‹ค๋Š” ์žฅ์ ์— ๋ฐ˜ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

๋‹ค๋ฅธ GC ๋ฐฉ์‹๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
Compaction ๋‹จ๊ณ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฐ๋‚œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์•„ Compaction ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค๋ฅธ GC ๋ฐฉ์‹์˜ stop-the-world ์‹œ๊ฐ„๋ณด๋‹ค stop-the-world ์‹œ๊ฐ„์ด ๋” ๊ธธ๊ธฐ ๋•Œ๋ฌธ์—
Compaction ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ์ž์ฃผ, ์˜ค๋žซ๋™์•ˆ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

G1 GC(-XX:+UseG1GC )

๋‹ค์Œ ๊ทธ๋ฆผ์—์„œ ๋ณด๋‹ค์‹œํ”ผ, G1 GC๋Š” ๋ฐ”๋‘‘ํŒ์˜ ๊ฐ ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๊ฐ€, ํ•ด๋‹น ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด ๋‹ค๋ฅธ ์˜์—ญ์—์„œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์ฆ‰, ์ง€๊ธˆ๊นŒ์ง€ ์„ค๋ช…ํ•œ Young์˜ ์„ธ๊ฐ€์ง€ ์˜์—ญ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์‚ฌ๋ผ์ง„ GC ๋ฐฉ์‹์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.
G1 GC๋Š” ์žฅ๊ธฐ์ ์œผ๋กœ ๋ง๋„ ๋งŽ๊ณ  ํƒˆ๋„ ๋งŽ์€ CMS GC๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด ์กŒ๋‹ค.

ํž™ ์˜์—ญ์ด ๋งค์šฐ ํฐ ๋จธ์‹ (์ตœ์†Œ 4GB)์—์„œ ๋Œ๋ฆฌ๊ธฐ์— ์ ํ•ฉํ•œ GC.
๋Œ€์‹  CMS์˜ ๋‹จ์ ์„ ์–ด๋Š ์ •๋„๋Š” ๊ทน๋ณตํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค.
ํž™์— ์˜์—ญ(Region) ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋„์ž…ํ•œ ๊ฒƒ์ธ๋ฐ์š”, ํž™์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Region์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
๋ช‡ ๋ช‡ Region ์€ Young Generation ์˜์—ญ์œผ๋กœ ์“ฐ์ด๊ณ , ๋‚˜๋จธ์ง€ ๋ช‡ ๋ช‡ Region ์€ Old Generation ์˜์—ญ์œผ๋กœ ์“ฐ์ž…๋‹ˆ๋‹ค.
Young Generation ์˜์—ญ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฑด Parallel์ด๋‚˜ CMS์ฒ˜๋Ÿผ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
(๋ญ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง€์šธ๊ฑด ์ง€์šฐ๊ณ , ๊ณ„์† ์“ฐ์ด๊ณ  ์žˆ๋Š”๊ฑด Old Generation ์˜์—ญ์œผ๋กœ ์˜ฎ๊ธฐ๊ฒ ์ฃ .)
๊ทธ๋ฆฌ๊ณ , Old Generation ์˜์—ญ์— ํ•ด๋‹นํ•˜๋Š” Region์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ํ…๋ฐ CMS์ฒ˜๋Ÿผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์“ฐ๋ ˆ๋“œ๋กœ ์ด ์˜์—ญ๋“ค์„ ์ •๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ CMS์™€ ์ฐจ์ด์ ์€ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์“ธ๋ชจ์—†๋Š” ๊ฐ์ฒด๋“ค์„ ์™์™ ๋นผ๋จน๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ.
ํ•œ Region์„ ํ†ต์งธ๋กœ ์ •๋ฆฌํ•ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
์ฐธ์กฐ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋“ค์€ ์ง€์šฐ๊ณ , ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ Region์œผ๋กœ ๊ณ ์Šค๋ž€ํžˆ ๋ณต์‚ฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋‹ค๋ฅธ Region์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ์ฒด๋งŒ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ ์ฐจ๊ณก์ฐจ๊ณก ์˜ฎ๊ธฐ๋ฏ€๋กœ Compacting์ด ๋˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” ํ˜„์ƒ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด์ฃ !
๊ทธ๋ ‡๋‹ค๋ฉด CMS์˜ ๋ฌธ์ œ์ ์ด์—ˆ๋˜ CPU๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•œ๋‹ค(1) ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌํŒŒํŽธํ™”(2) ์ค‘์— ๋ฉ”๋ชจ๋ฆฌํŒŒํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•œ GC๊ฐ€ ๋˜๊ฒ ๋„ค์š”.

์ฐธ๊ณ ) -XX:+UseStringDeduplication : https://dzone.com/articles/easy-change-to-reduce-memory-by-20

reference

https://d2.naver.com/helloworld/1329
https://12bme.tistory.com/57
https://okky.kr/article/379036
http://wanzargen.tistory.com/17?category=700063

tags:

Share