Garbage Collection - #1λΆ€ JVM HotSpot

λͺ©ν‘œ

μ˜€λŠ˜μ€ Java의 Garbage Collection에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 글은 μ œκ°€ μ΄ν•΄ν•˜κΈ° μœ„ν•¨μ„ λͺ©μ μœΌλ‘œ μž‘μ„±λœ κΈ€λ‘œμ¨, μ‹œλ¦¬μ¦ˆ ν˜•νƒœλ‘œ μž‘μ„±ν•΄μ„œ μ˜¬λ¦¬κ² μŠ΅λ‹ˆλ‹€. ν•œ λ²ˆμ— λ§Žμ€ 양을 μ»€λ²„ν•˜κΈ°κ°€ 쉽지 μ•Šμ•„μ„œ 잘게 λ‚˜λˆ μ„œ μ˜¬λ¦½λ‹ˆλ‹€. ν‹€λ¦° λ‚΄μš© λŒ“κΈ€λ‘œ ν™˜μ˜ν•©λ‹ˆλ‹€.🐢

원문 링크 μ˜μ–΄κ°€ νŽΈν•˜μ‹  뢄듀은 직접 μ½λŠ”κ²Œ 훨씬 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

Hotspot 아킀텍쳐

Hotspot JVM ν”„λ‘œμ„ΈμŠ€λŠ” ν•˜λ‚˜μ˜ 아킀텍쳐 μž…λ‹ˆλ‹€. 높은 νΌν¬λ¨ΌμŠ€μ™€ λŒ€λŸ‰μ˜ ν™•μž₯성을 μ§€μ›ν•˜λŠ” νŠΉμ§•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ HotSpot JVM JIT μ»΄νŒŒμΌλŸ¬λŠ” 동적 μ΅œμ ν™”λ₯Ό λ§Œλ“­λ‹ˆλ‹€. λ‹€λ₯Έ 말둜 ν•˜λ©΄ μžλ°” ν”„λ‘œκ·Έλž¨μ΄ λŸ°νƒ€μž„μ— μ΅œμ ν™” 결정을 ν•˜κ³ , κ³ μ„±λŠ₯ λ„€μ΄ν‹°λΈŒ 컴퓨터 λͺ…λ Ήμ–΄λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 높은 ν™•μž₯성을 κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

JVM의 메인 μ»΄ν¬λ„ŒνŠΈλ“€λ‘œ κ΅¬μ„±λ˜μ–΄ 있고, JVM은 클래슀 λ‘œλ”, runtime data areas, μ‹€ν–‰ 엔진을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Key Hotspot Components

JVM의 핡심 μ»΄ν¬λ„ŒνŠΈλ“€μ€ λ‹€μŒ μ΄λ―Έμ§€μ—μ„œ ν•˜μ΄λΌμ΄νŠΈλ‘œ 뢀뢄을 ν‘œμ‹œν•©λ‹ˆλ‹€.

퍼포먼슀 νŠœλ‹ν•  λ•Œ, μš°λ¦¬κ°€ 집쀑해야 ν•˜λŠ” 것이 μ € 3개의 μ»΄ν¬λ„ŒνŠΈ μž…λ‹ˆλ‹€. heap μ˜μ—­μ€ 객체듀이 μ €μž₯λ˜λŠ” κ³³μž…λ‹ˆλ‹€. heap μ˜μ—­μ€ gc(처음 μ‹œμž‘ν• λ•Œ μ„ νƒλœ garbage collector)에 μ˜ν•΄μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ νŠœλ‹ μ˜΅μ…˜μ€ 1)heapμ‚¬μ΄μ¦ˆμ™€ 2)μ μ ˆν•œ gcλ₯Ό μ„ νƒν•˜λŠ” 것이 μ€‘μš” ν•©λ‹ˆλ‹€. JIT 컴파일러 λ˜ν•œ νΌν¬λ¨ΌμŠ€μ— 맀우 λŒ€λ‹¨νžˆ μ€‘μš”ν•œ 영ν–₯을 λΌμΉ˜μ§€λ§Œ, 거의 λ“œλ¬Όκ²Œ μƒˆλ‘œμš΄ λ²„μ „μ˜ JVMμ—μ„œλŠ” μš”κ΅¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.(κ³ λ € λŒ€μƒ μ•„λ‹˜)

Performance Basics

κ·Έλ ‡λ‹€λ©΄ νΌν¬λ¨ΌμŠ€λΌλŠ” 것은 무엇을 μ˜λ―Έν• κΉŒμš”? responsiveness(응닡성)κ³Ό throughput(μ²˜λ¦¬λŸ‰)을 이야기 ν•©λ‹ˆλ‹€. 보톡 μžλ°” applicationμ—μ„œλŠ” 2가지 쀑 ν•˜λ‚˜μ— 집쀑을 ν•©λ‹ˆλ‹€.

λ°˜μ‘μ„±

λ°˜μ‘μ„±μ€ μ–Όλ§ˆλ‚˜ 빨리 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 응닡을 ν•˜λŠ”μ§€, μš”μ²­μ— λŒ€ν•œ μ‹œμŠ€ν…œ 응닡은 어떀지? 이런 것듀을 λ΄…λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

κΈ΄ μ‹œκ°„μ„ 두고 λ°˜μ‘μ„±μ„ μ‚΄ν”ΌλŠ”κ²Œ μ•„λ‹ˆλΌ, μ–Όλ§ˆλ‚˜ 짧은 μ‹œκ°„μ•ˆμ— λ°˜μ‘μ΄ μ˜€λŠ”μ§€λ₯Ό μ‚΄νŽ΄λ³΄λŠ”κ²Œ ν•΅μ‹¬μž…λ‹ˆλ‹€.

μ²˜λ¦¬λŸ‰

μ²˜λ¦¬λŸ‰μ€ νŠΉμ • κΈ°κ°„ λ™μ•ˆμ— μ–Όλ§ŒνΌ μ΅œλŒ€μΉ˜μ˜ 일을 ν•  수 μžˆλŠλƒλ₯Ό νŒλ‹¨ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ°˜μ‘μ„±μ΄ κΈ΄ μ‹œκ°„μ΄ μ•„λ‹Œ, 짧은 μ‹œκ°„μ— μ§‘μ€‘ν–ˆλ˜ 것에 λ°˜ν•΄, μ²˜λ¦¬λŸ‰μ€ κΈ΄ μ‹œκ°„μ— 집쀑 ν•©λ‹ˆλ‹€.

맺음말

λ‹€μŒμ—λŠ” GCκ°€ λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ°Έμ‘°κ°€ μ—†λŠ” 객체듀을 μ–΄λ–»κ²Œ νšŒμˆ˜ν•΄ κ°€λŠ”μ§€ 세뢀적인 뢀뢄을 그림을 ν†΅ν•΄μ„œ ν•˜λ‚˜μ”© μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ—°κ΄€ 포슀트