Skip to content

Files

Latest commit

49f57da ยท Mar 4, 2022

History

History
422 lines (247 loc) ยท 17.6 KB

JVM2.md

File metadata and controls

422 lines (247 loc) ยท 17.6 KB

Execution Engine & Garbage Collection

Execution Engine
JVM์˜ Heap ์˜์—ญ
Garbage Collection(GC)


Execution Engine

javac๊ฐ€ ์ปดํŒŒ์ผํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ Class Loader๋ฅผ ์ด์šฉํ•ด Runtime Data Area์— ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์ ์žฌํ•œ๋‹ค. ์ด ๋•Œ Execution Engine(์‹คํ–‰ ์—”์ง„)์€ Runtime Data Area์— ์ ์žฌ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.


Execution Engine์˜ ๊ตฌ์„ฑ ์š”์†Œ

Untitled

Execution Engine์€ Interpreter, JIT(Just-In-Time) Compiler, Garbage Collector ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

  1. Interpreter

    ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Native Code๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ•ด์„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Interpreter ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

    • ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
    • Interpreter๋Š” ์ค‘๋ณต๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋„ ๋ณ€ํ™˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ค‘๋ณต๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” JIT Compiler๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
  2. JIT Compiler

    Interpreter์˜ ํšจ์œจ์„ ๋†’ํžˆ๊ธฐ ์œ„ํ•ด์„œ JVM์ด ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์œผ๋กœ ๋ฐ˜๋ณต๋˜์–ด ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด JIT Compiler์— ์˜ํ•ด ๋ฐ˜๋ณต๋œ ์ฝ”๋“œ๋“ค์€ ํ•œ๋ฒˆ์— Native Code๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

    • ๋ฐ”์ดํŠธ์ฝ”๋“œ์—์„œ foo() ๋ฉ”์†Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์ค‘๋ณต๋˜๋ฉด, JIT Compiler๊ฐ€ foo() ๋ฉ”์†Œ๋“œ๋ฅผ Native Code๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

      Native Code๋Š” ์บ์‹œ์— ๋ณด๊ด€๋˜๊ธฐ ๋•Œ๋ฌธ์— JIT Compiler๊ฐ€ ํ•œ๋ฒˆ ์ปดํŒŒ์ผ ํ•ด๋‘๋ฉด ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค

    • JIT Comple ๊ณผ์ •์€ Interpreter ๋ฐฉ์‹๋ณด๋‹ค ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.

      ๋”ฐ๋ผ์„œ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ Interpreter ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ , ์—ฌ๋Ÿฌ๋ฒˆ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” JIT Compiler ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ฐ”๋žŒ์งํ•˜๋‹ค

  3. Garbage Collector

    Runtime Data Area์˜ Heap ์˜์—ญ์—์„œ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” Unreachable ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.



JVM์˜ Heap ์˜์—ญ

Heap์˜ ๊ตฌ์„ฑ๊ณผ GC ๋ฐฉ์‹์€ JVM vendor(๊ณต๊ธ‰ ์—…์ฒด)์˜ ์žฌ๋Ÿ‰์ด๋‹ค. ์•ž์œผ๋กœ ์–ธ๊ธ‰ํ•˜๋Š” JVM์˜ Heap๊ณผ GC ๋ฐฉ์‹์€ Oracle Vendor์˜ HotSpot JVM๊ณผ GC ๋ฐฉ์‹์ด๋‹ค.


JVM์˜ Heap ์˜์—ญ

Untitled

JVM์ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Runtime Data Area ์— Heap ์˜์—ญ์ด ์กด์žฌํ•œ๋‹ค.

Heap์˜์—ญ์€ JVM์ด ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ ์ธ์Šคํ„ด์Šค/๊ฐ์ฒด๊ฐ€ ๋™์ (new)์œผ๋กœ ํ• ๋‹น๋˜๋Š” ์˜์—ญ์ด๋‹ค. ์ด๋ ‡๊ฒŒ Heap ์˜์—ญ์— ์ƒ์„ฑ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋Š” Stack ์˜์—ญ์˜ ๋ณ€์ˆ˜/๊ฐ์ฒด์— ์˜ํ•ด ์ฐธ์กฐ๋œ๋‹ค.


์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •

Untitled

  1. ์ƒ์„ฑํ•˜๋ ค ํ•˜๋Š” Class Object๊ฐ€ Heap์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค
  2. ์—†๋‹ค๋ฉด, Class Object๋ฅผ Heap์— ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น Class์— ๋Œ€ํ•œ Data(Class Data)๋ฅผ Method Area์— ์ €์žฅํ•œ๋‹ค
  3. ์ด ํ›„ JVM์€ ํ•ด๋‹น Class Object์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค(Object)๋ฅผ Heap์— ์ƒ์„ฑํ•˜๊ณ , Method Area์˜ Class Data๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค
  4. (Heap์— ํ•ด๋‹น Class Object๊ฐ€ ์กด์žฌํ•˜๊ณ  Method Area ์˜์—ญ์— Class Data๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ) ํ•ด๋‹น Class Object์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑํ•œ๋‹ค๋ฉด, Heap์— ํ•ด๋‹น Class Object์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค(Object)๋งŒ ์ƒ์„ฑ์‹œํ‚จ๋‹ค.


Garbage Collection(GC)

GC๊ฐ€ ์™œ ํ•„์š”ํ• ๊นŒ?

Java๋Š” ์ฝ”๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ๋ฟ ์ด๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ Garbage Collector๊ฐ€ ๋”์ด์ƒ ํ•„์š”์—†๋Š”(Unreachable) ์“ฐ๋ ˆ๊ธฐ(Garbage) ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ๋Š” Garbage Collection ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค

  • ๊ฐ€๋” ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ null๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ System.gc() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋„ํ•œ๋‹ค.

    ๊ฐ์ฒด๋ฅผ null๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ, System.gc() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋งค์šฐ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.


์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜/๊ฐ์ฒด๊ฐ€ ์—†๋‹ค๋ฉด(Unreachable ํ•˜๋‹ค๋ฉด) โ†’ Garbage Collection(GC)์˜ ๋Œ€์ƒ

Heap ์˜์—ญ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค/๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜/๊ฐ์ฒด๊ฐ€ ์—†๋‹ค๋ฉด Garbage Collector๊ฐ€ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค/๊ฐ์ฒด๋ฅผ Heap ์˜์—ญ์—์„œ ์‚ญ์ œํ•œ๋‹ค. ์ด๋ฅผ Garbage Collection(GC) ์ด๋ผ ํ•œ๋‹ค.

String a = "https";
a += "www.example.com"; 

"https" ์ด๋ผ๋Š” String ๊ฐ์ฒด๋Š” Heap ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ += ์—ฐ์‚ฐ์ด ์‹คํ–‰๋˜๋ฉด์„œ ๋”์ด์ƒ a๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. "https" ์ฒ˜๋Ÿผ ๋”์ด์ƒ ์ฐธ์กฐ๋ฅผ ๋ฐ›์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ Unreachable ๊ฐ์ฒด ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


stop-the-world

stop-the-world๋ž€ GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฆ‰, GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—…์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ด๋‹ค.

  • GC ์ž‘์—…์ด ์™„๋ฃŒ๋œ ์ดํ›„์—์•ผ ์ค‘๋‹จํ–ˆ๋˜ ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.
  • GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ชจ๋‘ stop-the-world๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. stop-the-world ์‹œ๊ฐ„์€ GC ํŠœ๋‹์„ ํ†ตํ•ด ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

GC๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์˜์—ญ โ†’ Heap์˜ Young Generation ์˜์—ญ , Old Generation ์˜์—ญ

Untitled

***Weak Generational Hypothesis ์ „์ œ์กฐ๊ฑด์„ ๋ฐ”ํƒ•์œผ๋กœ GC๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์˜์—ญ์„ 2๊ฐœ์˜ ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„(Young, Old Generation ์˜์—ญ)์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.***

Weak Generational Hypothesis ์ „์ œ์กฐ๊ฑด์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ(Unreachable) ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  2. Old ์˜์—ญ์˜ ๊ฐ์ฒด์—์„œ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ๋งค์šฐ ๋“œ๋ฌผ๋‹ค.

๐Ÿ“Œ Young Generation ์˜์—ญ

Young Generation = Eden + Survivor0 + Survivor1

์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์€ Young Gen ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.

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

Eden ์˜์—ญ

Object๊ฐ€ ์ตœ์ดˆ๋กœ ํ• ๋‹น๋˜๋Š” ์˜์—ญ์ด๋‹ค. ๋งŒ์•ฝ Eden ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๋ฉด Minor GC๊ฐ€ ์ผ์–ด๋‚˜๊ณ  Minor GC์—์„œ ์‚ด์•„๋‚จ์€ Object(LiveObject)๋Š” Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

  • Minor GC์—์„œ ์‚ด์•„๋‚จ๋Š” ๊ฐ์ฒด๋ž€ Stack ์˜์—ญ์˜ ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด์— ์˜ํ•ด ์ฐธ์กฐ๋ฅผ ๋ฐ›๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Survivor ์˜์—ญ

Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ Object๊ฐ€ ์ž ์‹œ ๋จธ๋ฌด๋Š” ์˜์—ญ์ด๋‹ค. ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์ด ๊ฐ€๋“์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์‚ด์•„๋‚จ์€ Object๊ฐ€ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

  • ์ด ๋•Œ, Minor GC์ „์— ๊ฐ€๋“์ฐผ์—ˆ๋˜ Survivor ์˜์—ญ์€ ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค

Survivor0 โ†’ Survivor1/Survivor0 โ† Survivor1 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค ๊ณ„์† ์‚ด์•„๋‚จ์€ Object๋Š” Old Gen์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค


๐Ÿงฉ Minor GC

Young Gen ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” Garbage Collection์„ Minor GC ๋ผ๊ณ  ํ•œ๋‹ค.

Eden & Survivor0 & Survivor1 ์˜์—ญ์˜ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ

Untitled

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

  2. Eden ์˜์—ญ์—์„œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™ํ•œ๋‹ค

  3. ์ดํ›„์— Eden ์˜์—ญ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ Survivor์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ์Œ“์ธ๋‹ค

  4. ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์ด ๊ฐ€๋“์ฐจ๋ฉด, Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ทธ ์ค‘ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ ๋˜ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

    • ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์—์„œ ๋˜ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์งˆ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๊ฐ์ฒด์˜ age๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    • Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋‘ ์˜์—ญ์— ๋ชจ๋‘ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ๋น„์ •์ƒ์ ์ธ ์ƒํƒœ์ด๋‹ค.
  5. 1 ~ 4 ๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ฐ์ฒด์˜ age๊ฐ’์ด ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์ด ๋˜๋ฉด Old Gen ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์ด ๋‹จ๊ณ„๋ฅผ Promotion ์ด๋ผ๊ณ  ํ•œ๋‹ค.

    Minor GC๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚˜๋ฉด์„œ Promotion๋„ ๊พธ์ค€ํžˆ ๋ฐœ์ƒํ•œ๋‹ค. Promotion ์ž‘์—…์ด ๋ฐ˜๋ณต๋˜์–ด Old Gen ์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋“์ฐจ๋ฉด Major GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


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

  1. bump-the-pointer

    ๋งˆ์ง€๋ง‰ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์˜ ๋งจ ์œ„(top)์— ์กด์žฌํ•˜๋Š”๋ฐ, bump-the-pointer ๋ž€ top์œ„์น˜์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋‹ค.

    • Eden ์˜์—ญ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํ• ๋‹น๋œ ๊ฐ์ฒด๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
    • ๋‹ค์Œ์— ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, Eden ์˜์—ญ์— ๊ฐ€์šฉ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด bump-the-pointer๋ฅผ ํ™œ์šฉํ•˜์—ฌ top์— ์œ„์น˜ํ•œ ๊ฐ์ฒด๋งŒ ์ ๊ฒ€ํ•˜๊ณ  Eden์— ๋„ฃ์„ ์ˆ˜ ์žˆ์„์ง€ ํ™•์ธํ•œ๋‹ค.
  2. TLABS(Thread-Local Allocation Buffers)

    ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ bump-the-pointer์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Locking ๊ธฐ๋ฒ•์ด ์‚ฌ์šฉ๋œ๋‹ค. ํ•˜์ง€๋งŒ Locking ๊ธฐ๋ฒ•์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋–จ์–ด์ ธ HotSpot JVM์—์„œ๋Š” TLABS ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค.

    ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ Eden ์˜์—ญ์˜ ์ผ๋ถ€(TLABS)๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ Locking ์—†์ด bump-the-pointer๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.


๐Ÿ“Œ Old Generation ์˜์—ญ

Young Gen ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old Gen ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.

  • Old Gen ์˜์—ญ์€ ๋Œ€๋ถ€๋ถ„ Young Gen ์˜์—ญ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ , ํฌ๊ธฐ๊ฐ€ ํฐ๋งŒํผ GC๊ฐ€ ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค

๐Ÿงฉ Major GC

Old Gen ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” Garbage Collection์„ Minor GC ๋ผ๊ณ  ํ•œ๋‹ค.

  • Old Gen ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋“์ฐฐ ๋•Œ์—๋งŒ Major GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Old Gen์˜ Card Table โ†’ Young Gen์„ ์œ„ํ•œ ๊ฒƒ

Untitled

Old Gen ์˜์—ญ์˜ ๊ฐ์ฒด๊ฐ€ Young Gen ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ, 512byte์˜ Card Table ์— ํ‘œ์‹œํ•˜์—ฌ Minor GC์˜ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด์ฃผ์–ด ์ „๋ฐ˜์ ์ธ GC ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€๋‹ค.

  • ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์ง€๋งŒ Minor GC๊ณผ์ •์—์„œ Young Gen ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” Old Gen ์˜์—ญ์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Card Table๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

    Old Gen ์˜์—ญ์˜ ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ด€๊ณ„๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  Card Table์˜ ์ •๋ณด๋งŒ์œผ๋กœ Young Gen ์˜์—ญ์˜ ํŠน์ • ๊ฐ์ฒด๊ฐ€ GC ๋Œ€์ƒ์— ํฌํ•จ๋˜๋Š”์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.


JDK7 ๊ธฐ์ค€์œผ๋กœ Major GC ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” Garbage Collector์—๋Š” 5๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค

  1. Serial GC
  2. Parallel GC
  3. Parallel Old GC (Parallel Compacting GC)
  4. Concurrent Mark & Sweep GC (CMS GC)
  5. G1 (Garbage First) GC

โœ…Serial GC (-XX:+UseSerialGC)

Java SE 5,6์˜ ๊ธฐ๋ณธ Garbage Collector์ด๋‹ค.

  • Minor GC์™€ Major GC๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค
    • Minor GC๋Š” ์•ž์„œ ์„ค๋ช…ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๋œ๋‹ค
    • Major GC๋Š” Mark-Sweep-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋œ๋‹ค

Mark-Sweep-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜

Untitled

Mark-Sweep-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ž€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์„ Heap ์˜์—ญ์˜ ์‹œ์ž‘ ์œ„์น˜์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์˜ฎ๊ฒจ๋†“๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  • Mark โ†’ Old Gen ์˜์—ญ์—์„œ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณผ์ •
  • Sweep โ†’ Heap ์˜ ์‹œ์ž‘ ์œ„์น˜๋ถ€ํ„ฐ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋งŒ ๋‚จ๊ฒจ๋‘๊ณ  Unreachable ๊ฐ์ฒด๋“ค์„ ์ง€์šฐ๋Š” ๊ณผ์ •
  • Compact โ†’ Heap์˜ ์‹œ์ž‘ ์œ„์น˜์„œ๋ถ€ํ„ฐ ๊ฐ์ฒด๋“ค์ด ์—ฐ์†์ ์œผ๋กœ ์œ„์น˜ํ•˜๋„๋ก ์ฑ„์šฐ๋Š” ๊ณผ์ • (Compact ๊ณผ์ •์ด ์ˆ˜ํ–‰๋˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค)

โœ…Parallel GC (-XX:+UseParallelGC)

Parallel GC์€ Serial GC์™€ ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋™์ผํ•˜๋‹ค.

Parallel GC์™€ Serial GC์˜ ์ฐจ์ด์ 

Untitled

  • Serial GC๋Š” GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์˜ค์ง ํ•˜๋‚˜ ๋ฟ์ด๋‹ค (Single Thread)
  • Parallel GC๋Š” GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋‹ค (Multi Thread). ๋”ฐ๋ผ์„œ Serial GC๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ Garbage Collection์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ…Parallel Old GC(-XX:+UseParallelOldGC)

โ€œJDK 5 update 6โ€ ๋ถ€ํ„ฐ ์ œ๊ณตํ•˜๋Š” GC์ด๋‹ค

  • Parallel GC์™€ ๋น„๊ตํ•˜๋ฉด Major GC์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ๋‹ค๋ฅด๋‹ค
    • Parallel GC๋Š” Mark-Sweep-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Parallel Old GC๋Š” Mark-Summary-Compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

Mark-Summary-Compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ Summary ๋‹จ๊ณ„

Summary ๋‹จ๊ณ„๋Š” Major GC๋ฅผ ์ˆ˜ํ–‰ํ•œ ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•œ๋‹ค. (Sweep๊ณผ ๋‹ค๋ฅด๋‹ค)


โœ…CMS GC (-XX:+UseConcMarkSweepGC)

CMS GC๋Š” ๋ณต์žกํ•˜๋‹ค

CMS GC์˜ Garbage Collection ๊ณผ์ • : Concurrent Mark-Sweep

  1. Initial Mark

    Class Loader์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ์ฒด ์ค‘ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋งŒ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค

  2. Concurrent Mark

    Initial Mark์—์„œ ํ™•์ธํ•œ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์—(Concurrent) ์ง„ํ–‰๋œ๋‹ค.

  3. Remark

    Concurrent Mark์—์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๊ฐ€ ๋Š๊ธด ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค

  4. Concurrent Sweep

    Unreachable ๊ฐ์ฒด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์ด ๋˜ํ•œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค.

์žฅ๋‹จ์ 

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

โœ…G1 GC

G1 GC๋Š” CMS GC๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Garbage Collector์ด๋‹ค. G1 GC๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ Young Gen, Old Gen ์˜์—ญ์— ๋Œ€ํ•ด์„œ ์žŠ์–ด์•ผ ํ•œ๋‹ค.

  • Eden โ†’ SurvivorX โ†’ SurvivorY โ†’ Old Gen ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์ด๋™ํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์‚ฌ๋ผ์ง„ Garbage Collection ๋ฐฉ์‹์ด๋‹ค.
  • Java 11์˜ Default GC๋Š” G1 GC์ด๋‹ค.

G1 GC์˜ Garbage Collection ๊ณผ์ •

Untitled

  1. ๋ฐ”๋‘‘ํŒ์˜ ๊ฐ ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  2. ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ ค๋Š” ์˜์—ญ์ด ๊ฐ€๋“์ฐผ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์˜์—ญ์— ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๊ฐ€๋“์ฐฌ ์˜์—ญ์— Major GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์žฅ์ 

๋‹ค๋ฅธ Garbage Collector๋“ค ๋ณด๋‹ค ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

G1 GC์™€ CMS GC์˜ ์ฐจ์ด์ 

  • G1 GC : Heap ์˜์—ญ์„ ๋ฐ”๋‘‘ํŒ ๋ชจ์–‘์˜ N๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ์ชผ๊ฐœ์–ด ๊ฐ ์˜์—ญ์— Major GC๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค
  • CMS GC : Heap ์˜์—ญ ์ „์ฒด๋ฅผ Concurrent Mark-Sweep์„ ํ•˜์—ฌ Major GC๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.


๐Ÿ“Œ Permanent Generation ์˜์—ญ(Non-Heap ์˜์—ญ)

Perm Gen ์˜์—ญ์€ ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ์˜ ๋ฉ”ํƒ€์ •๋ณด, static ๋ณ€์ˆ˜ ๋ฐ ์ƒ์ˆ˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.

Perm Gen ์˜์—ญ์˜ ํƒ„์ƒ

Perm Gen ์˜์—ญ์€ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๊ธธ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฐ์ฒด๋“ค์„ Perm Gen ์˜์—ญ์— ํ• ๋‹นํ•˜์—ฌ GC ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

  • ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๊ธธ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฐ์ฒด๋“ค : Class ๊ฐ์ฒด, String ๊ฐ์ฒด

Java 8๋ถ€ํ„ฐ Perm Gen ์˜์—ญ์ด ์‚ฌ๋ผ์ง€๊ณ  MetaSpace๊ฐ€ ์ƒ๊ฒผ๋‹ค

Untitled

Java8 ์ด์ „์— Perm์˜์—ญ์€ ๋ณดํ†ต Class์˜ Meta ์ •๋ณด๋‚˜ Method์˜ Meta ์ •๋ณด, Static ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜ ์ •๋ณด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ํ”ํžˆ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ ์˜์—ญ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์ด ์˜์—ญ์€ Java 8 ๋ถ€ํ„ฐ๋Š” Native ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜์—ฌ Metaspace์˜์—ญ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. (๋‹ค๋งŒ, ๊ธฐ์กด Perm์˜์—ญ์— ์กด์žฌํ•˜๋˜ Static Object๋Š” Heap ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ ธ์„œ GC์˜ ๋Œ€์ƒ์ด ์ตœ๋Œ€ํ•œ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค) ์ฆ‰, ๊ฐ์ข… ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ OS๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ Perm ์˜์—ญ์˜ ์‚ฌ์ด์ฆˆ ์ œํ•œ์„ ์—†์•ค ๊ฒƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค

๊ทธ๋ฆฌ๊ณ  MetaSpace ์˜์—ญ์€ Heap์ด ์•„๋‹Œ Native Memory ์˜์—ญ์œผ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.

  • Heap ์˜์—ญ์€ JVM์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์˜์—ญ์ด๊ณ 
  • Native ์˜์—ญ์€ OS ๋ ˆ๋ฒจ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์ด๋‹ค

๊ทธ๋Ÿผ Java8 ์ด์ „์— Perm Gen ์˜์—ญ์€ Heap ์˜์—ญ์— ํฌํ•จ๋˜์—ˆ์„๊นŒ? โ†’ NO

OutOfMemoryError ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Heap ์˜์—ญ์ด ๋ถ€์กฑํ•  ๋•Œ java.lang.OutOfMemoryError: Heap space space ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , PermGen ์˜์—ญ์ด ๋ถ€์กฑํ•˜๋ฉด java.lang.OutOfMemoryError: PermGen space ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

UXudr.jpg

๋˜ํ•œ 3๊ฐœ์˜ Oracle ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด PermGen์ด Heap ์˜์—ญ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•œ๋‹ค. (์ฐธ๊ณ )

  • Java์˜ Heap ์˜์—ญ : Perm Gen์— ์žˆ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
  • Perm Gen ์˜์—ญ : ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ƒ์ˆ˜ ํ’€ ์ •๋ณด, JVM/JIT ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„

์ฐธ๊ณ 

[naver d2] JVM Internal

Perm Gen์€ Non-Heap ์˜์—ญ

[naver d2] Java Garbage Collection

์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ - ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

[JAVA] JVM Execution Engine (์‹คํ–‰์—”์ง„)

๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

Execution Engine์˜ Interpreter์™€ JIT Compiler์— ๋Œ€ํ•ด ์•„์‹œ๋‚˜์š”?

๊ฐ€๋น„์ง€ ์ปฌ๋ž™์…˜์ด ์™œ ์ผ์–ด๋‚˜์ฃ ? ์–ด๋””์—์„œ ์ผ์–ด๋‚˜๋‚˜์š”?

Minor GC์™€ Major GC์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

Java8๋ถ€ํ„ฐ Permanent Generation ์˜์—ญ์ด ์‚ฌ๋ผ์ง„ ์ด์œ ๋ฅผ ์•„์‹œ๋‚˜์š”?