๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/Java, Python

JVM ํž™ ์˜์—ญ๊ณผ GC

by syLim___ 2025. 1. 30.
728x90

โœ… JVM ์•„ํ‚คํ…์ฒ˜

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://medium.com/java-for-beginners/understanding-java-virtual-machine-jvm-architecture-e68d1c611026

 

 

JVM ๊ตฌ์„ฑ์š”์†Œ๋Š” ํฌ๊ฒŒ Class Loader, Runtime Data Area, Execution Engine, ๊ทธ๋ฆฌ๊ณ  JNI์™€ Native method library๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค์ฝ”๋“œ(.java)๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์— ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋ฅผ JVM์˜ Runtime Data Area์— ๋กœ๋“œ(์ ์žฌ)ํ•œ๋‹ค.

JVM Execution engine์€ ๋กœ๋“œ๋œ ํด๋ž˜์Šค์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ํ•ด์„(interpret)ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

    (ํ•„์š”์— ๋”ฐ๋ผ JIT Compiler๊ฐ€ ๋™์ž‘ํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฏธ๋ฆฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ, ์บ์‹ฑํ•ด๋‘๊ณ  ํ•ด์„๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ธฐ๋„ ํ•œ๋‹ค)

 

๐Ÿ“Œ JVM Runtime Data Area ์ข€ ๋” ์ž์„ธํžˆ ๋ณด๊ธฐ

Runtime Data Area๋ž€, JVM์ด ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.

  • Method area
    • static zone๊ณผ non-static zone์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
    • ํด๋ž˜์Šค, ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, static ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ๋“ฑ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋“ค์ด ์ €์žฅ๋œ๋‹ค.
    • ๋ชจ๋“  Thread๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
  • Heap area
    • new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
    • ๋ชจ๋“  Thread๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
    • Garbage Collection์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.
  • Stack area
    • ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ๋ฆฌํ„ด๊ฐ’ ๋“ฑ์ด ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
    • ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋˜์–ด call stack์— ์Œ“์ด๊ฒŒ ๋œ๋‹ค.
    • Thread๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜์—ญ์ด๋‹ค.
  • PC register
    • ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ JVM ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
    • Thread๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋œ๋‹ค.
  • Native method stack
    • C๋‚˜ C++ ๋“ฑ์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์œ„ํ•ด ํ• ๋‹น๋˜๋Š” ๊ตฌ์—ญ์ด๋‹ค.

 

โœ… GC๋ž€?

Heap area๊ฐ€ Garbage Collection์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค.

Heap area๊ฐ€ ๋ฌด์—‡์ธ์ง€๋Š” ์•Œ๊ฒ ๋Š”๋ฐ, Garbage Collection์ด ๋„๋Œ€์ฒด ๋ญ˜๊นŒ?

 

Java์—์„œ๋Š” heap ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ช…๋ น์–ด๋งŒ ์กด์žฌํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์œ„ํ•œ ์–ด๋– ํ•œ ์ฝ”๋“œ๋‚˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

Java heap ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋Š” ์˜ค๋กœ์ง€ Garbage collection์„ ํ†ตํ•ด์„œ๋งŒ ์ˆ˜ํ–‰๋œ๋‹ค.

 

Garbage Collection์ด๋ž€, heap ์˜์—ญ์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด (=garbage)๋ฅผ ์ œ๊ฑฐํ•ด ๊ฐ€์šฉ ๊ณต๊ฐ„์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด๋‹ค.

GC๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ํ•œ์ •๋œ heap ๊ณต๊ฐ„์˜ ์žฌํ™œ์šฉ์„ ์œ„ํ•ด์„œ์ด๋‹ค.

 

JVM specification์€ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋Š” GC๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ด๋ฃจ์–ด์ ธ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ•ํ•˜๊ฒŒ ์ œ์‹œํ•˜๊ณ  ์žˆ๊ณ 

๊ฐ JVM ๋ฒค๋”์‚ฌ๋“ค์€ ์ด ์›์น™์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ GC๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

 

๐Ÿฅ GC ์žฅ์ 

  • ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๊ฐ€ ์ž๋™ํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ๋งค๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

๐Ÿฅ GC ๋‹จ์ 

  • Garbage Collection์€ ๋ช…์‹œ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ณด๋‹ค ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • GC๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์ˆœ๊ฐ„ ์ผ์–ด๋‚˜๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ํ”„๋กœ๊ทธ๋žจ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 

โœ… JVM Heap area ๋ช…์„ธ์™€ ์‹ค์ œ ๊ตฌํ˜„

JVM specification์—์„œ๋Š” GC ๋ฟ๋งŒ์•„๋‹ˆ๋ผ heap ์˜์—ญ์˜ ์ „๋ฐ˜์ ์ธ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด์„œ๋„ ํŠน๋ณ„ํžˆ ์ •์˜๋œ ๋ฐ” ์—†๋‹ค.

JVM specification์—์„œ heap์€ ๋‹จ์ˆœํžˆ ์ธ์Šคํ„ด์Šค๋‚˜ array๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋ผ๊ณ ๋งŒ ๋ช…์‹œ๋˜์–ด ์žˆ๊ณ ,

heap์˜์—ญ์˜ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด์„œ๋Š” JVM์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฒค๋”์‚ฌ๋“ค์—๊ฒŒ ์œ„์ž„ํ•˜๊ณ  ์žˆ๋‹ค.

 

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์„ค๋ช…๊ณผ ๊ทธ๋ฆผ์ด ๋“ฑ์žฅํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ์ด๊ฒƒ ๋•Œ๋ฌธ์ด๋‹ค!

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ JVM์ด๋ผ๊ณ  ํ•˜๋Š” Hotspot JVM์˜ Garbage Collector์™€, Heap ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค.

 

 

โœ… Hotspot JVM์˜ Heap ๊ตฌ์กฐ์™€ Garbage Collection

Hotspot JVM์€ Generational Collection ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • Heap ์˜์—ญ์„ Young area์™€ old area๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. (young area๋Š” ๋‹ค์‹œ eden area์™€ survivor area๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.)
  • young area์— ๋Œ€ํ•ด์„œ๋Š” minorGC๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , old area์— ๋Œ€ํ•ด์„œ๋Š” fullGC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

(์‚ฌ์ง„ ์† Perm(permanent) ์˜์—ญ์€ Java8๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ๋ผ์ง€๊ณ , ๋Œ€์‹  Metaspace๋กœ ์ „ํ™˜๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.)

 

  • Young Generation
    • Eden, Survivor0, Survivor1 ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • new ํ‚ค์›Œ๋“œ๋กœ ๊ฐ์ฒด๊ฐ€ ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋Š” ๊ฐ€์žฅ ๋จผ์ € eden ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.
    • Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๋ฉด minor GC๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.
      • ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋Š” eden ์˜์—ญ์— ๋‚จ๊ฒจ๋‘๊ณ , ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” live object๋Š” survivor ์˜์—ญ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
      • ๋ชจ๋“  live object๊ฐ€ survivor ์˜์—ญ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ  ๋‚˜๋ฉด, eden์˜์—ญ์— ๋‚จ์•„์žˆ๋˜ ๊ฐ์ฒด๋“ค์„ ๋ชจ๋‘ ํ• ๋‹น ํ•ด์ œํ•œ๋‹ค.
  • Old generation
    • Young generation์—์„œ live object๋กœ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” old generation์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ •ํ•ด์ง„ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋ฅผ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
      • ์ฆ‰ Old generation์€ ๋ง‰ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ค๋Š” ์˜์—ญ์ด ์•„๋‹ˆ๋ผ, ๋น„๊ต์  ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ๋˜์–ด ์‚ฌ์šฉ๋˜์—ˆ๊ณ  ์•ž์œผ๋กœ๋„ ๊ณ„์† ์‚ฌ์šฉ๋  ํ™•๋ฅ ์ด ๋†’์€ ๊ฐ์ฒด๋“ค์ด ๋“ค์–ด์˜ค๋Š” ์˜์—ญ์ด๋‹ค.
    • Old generation์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฝ‰์ฐจ๋ฉด full GC(major GC)๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ํž™ ์˜์—ญ์˜ ๊ฐ์ฒด๋Š” stack ๋ฐ์ดํ„ฐ, static ๋ฐ์ดํ„ฐ, JNI๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ GC ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

 

GC๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์ˆœ๊ฐ„์—๋Š” ์งง์€ ์‹œ๊ฐ„์ด์ง€๋งŒ ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์ด ์ผ์‹œ์ •์ง€๋œ๋‹ค.(๋ฌผ๋ก  JVM ๊ตฌํ˜„์— ๋”ฐ๋ผ์„œ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค)

MinorGC ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ๋ณดํ†ต 1์ดˆ ์ด๋‚ด์ด๊ณ , fullGC๋Š” ์ˆ˜ ์ดˆ ์ด์ƒ ์ง„ํ–‰๋˜๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด ์ง€์—ฐ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‘๋‹ต์†๋„๋Š” ๋ฌผ๋ก , DB ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๋Š” ๋“ฑ ์šด์˜์ƒ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ GC ์ž์ฒด๊ฐ€ ์ ๊ฒŒ ์ผ์–ด๋‚˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์ค‘ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ๋งŽ์„์ˆ˜๋ก Garbage Collector๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋Œ€์ƒ๋„ ๋งŽ์•„์ง€๋ฏ€๋กœ GC ์ˆ˜ํ–‰ ํšŸ์ˆ˜๋„ ๋งŽ์•„์ง„๋‹ค.

๋”ฐ๋ผ์„œ GC ์ž์ฒด๊ฐ€ ์ ๊ฒŒ ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด String ๋Œ€์‹  StringBuilder๋‚˜ StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” GC ํŠœ๋‹์ด ์žˆ๋Š”๋ฐ, ํฌ๊ฒŒ ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํŠœ๋‹์„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

    - Old area๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฐ์ฒด์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”์‹œ์ผœ์„œ ์ตœ๋Œ€ํ•œ fullGC๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•

    - FullGC์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ง€์—ฐ์‹œ๊ฐ„์„ ๊ฐ์†Œ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

 

 

โœ… ๋Œ€ํ‘œ์ ์ธ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ“Œ Mark and Sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜

- GC์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ, mark ๋‹จ๊ณ„์™€ sweep ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋™์ž‘ํ•œ๋‹ค.

 

๐Ÿฅ ๋™์ž‘ ๋ฐฉ์‹

- Mark ๋‹จ๊ณ„ : ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”(=์‚ฌ์šฉ์ค‘์ธ) ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ํ‘œ์‹œํ•œ๋‹ค.

- Sweep ๋‹จ๊ณ„ : ๋งˆํ‚น๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ „๋ถ€ ํšŒ์ˆ˜ํ•œ๋‹ค.

 

๐Ÿฅ ์žฅ์ 

- ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ GC์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿฅ ๋‹จ์ 

- Stop-the-world : GC์ž‘์—… ๋„์ค‘์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ „์ฒด ์ค‘๋‹จ๋œ๋‹ค.

- ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ: ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น ํ•ด์ œ๋œ ํ›„, ๊ฐ€์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์ด ์—ฐ์†์ ์ด์ง€ ์•Š์•„์„œ

                                ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด ํ• ๋‹น์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ Mark and Copy ์•Œ๊ณ ๋ฆฌ์ฆ˜

- Mark and sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

- ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋‘ ๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ํ•œ ์ชฝ ์˜์—ญ์—์„œ๋งŒ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

- ์œ„์—์„œ ์„ค๋ช…ํ•œ survivor0 ์˜์—ญ๊ณผ survivor1 ์˜์—ญ์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค.

 

๐Ÿฅ ๋™์ž‘ ๋ฐฉ์‹

- ์ฒ˜์Œ์—๋Š” ๊ฐ€์šฉ ์˜์—ญ ์ค‘ ํ•œ ์ชฝ ์˜์—ญ์—์„œ๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

- Mark ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ์ค‘์ธ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ํ‘œ์‹œํ•˜๊ณ , ๋งˆํ‚น๋œ ๊ฐ์ฒด๋Š” ์ „๋ถ€ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌํ•œ๋‹ค.

- ๊ธฐ์กด ์˜์—ญ์— ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด๋Š” ์ „๋ถ€ ํšŒ์ˆ˜(sweep)ํ•˜๊ณ , ๊ฐ€์šฉ ์˜์—ญ๋ผ๋ฆฌ ์—ญํ• ์„ ๊ต์ฒดํ•˜์—ฌ ์ด๋ฒˆ์—๋Š” sweepํ•œ ์˜์—ญ์—๋งŒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

๐Ÿฅ ์žฅ์ 

- ๊ฐ์ฒด๋ฅผ ํ•œ์ชฝ ์˜์—ญ์—์„œ ๋‹ค๋ฅธ์ชฝ ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌํ•  ๋•Œ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

๐Ÿฅ ๋‹จ์ 

- ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ ๋‹ค.

- ์ƒ์กดํ•œ ๊ฐ์ฒด๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋ณต์‚ฌ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ Mark and Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜

- Mark and copy ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, mark, compact, sweep ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋™์ž‘ํ•œ๋‹ค.

 

๐Ÿฅ ๋™์ž‘ ๋ฐฉ์‹

- Mark ๋‹จ๊ณ„ : ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”(=์‚ฌ์šฉ์ค‘์ธ) ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ํ‘œ์‹œํ•œ๋‹ค.

- Compact ๋‹จ๊ณ„ : ๋งˆํ‚น๋œ ๊ฐ์ฒด๋ฅผ ํ•œ์ชฝ์œผ๋กœ ๋ฐ€์–ด ์ •๋ฆฌํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๊ณต๊ฐ„์„ ์—ฐ์†์ ์ธ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ํ™•๋ณดํ•œ๋‹ค.

- Sweep ๋‹จ๊ณ„ : ๋‚˜๋จธ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•œ๋‹ค.

 

๐Ÿฅ ์žฅ์ 

- ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ, mark and copy ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•ด ๊ฐ€์šฉ๊ณต๊ฐ„๋„ ๋งŽ์•„์ง„๋‹ค.

๐Ÿฅ ๋‹จ์ 

- ์—ฌ์ „ํžˆ GC ๋™์ž‘์ค‘์—๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์ด ๋ฉˆ์ถ”๋ฉฐ ์ง€์—ฐ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค. (stop-the-world)

- Compact ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ด๋™ ๋น„์šฉ์ด ๋“ ๋‹ค.

 

 

โœ… GC ์ข…๋ฅ˜

๐Ÿ“Œ Serial GC

- ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

- ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ผ์‹œ์ •์ง€๋œ๋‹ค. (stop-the-world)

- Java8์—์„œ JVM Client VM์˜ ๊ธฐ๋ณธ GC์ด๋‹ค.

 

๐Ÿ“Œ Parallel GC

- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ‘๋ ฌ๋กœ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

- SerialGC์— ๋น„ํ•ด ์†๋„๋Š” ๋นจ๋ผ์กŒ์œผ๋‚˜, ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€๋Š” stop-the-world๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

- Java8์—์„œ JVM Server VM์˜ ๊ธฐ๋ณธ GC์ด๋‹ค.

 

๐Ÿ“Œ G1 GC

- Garbage First GC.

- ๊ธฐ๋ณธ์˜ ๋ฐฉ์‹์ฒ˜๋Ÿผ ํž™ ์˜์—ญ์„ Generation์œผ๋กœ ๋‚˜๋ˆ„์–ด GC๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ํž™ ์˜์—ญ์„ Region์ด๋ผ๊ณ  ํ•˜๋Š” ๊ท ์ผํ•œ ํฌ๊ธฐ์˜ ๋…๋ฆฝ๋œ ์˜์—ญ์œผ๋กœ ๋ถ„ํ• ํ•˜๊ณ , ํšŒ์ˆ˜ํ•  ๊ฐ์ฒด๊ฐ€ ๋งŽ์€ ์˜์—ญ์„ ์šฐ์„  ํšŒ์ˆ˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

- Java9๋ถ€ํ„ฐ ํ˜„์žฌ(Java23)๊นŒ์ง€ ๊ธฐ๋ณธGC์ด๋‹ค.

 

 

โœ… References

- ๐Ÿ“– JVM Performance Optimizing ๋ฐ ์„ฑ๋Šฅ๋ถ„์„ ์‚ฌ๋ก€

728x90