Skip to content

Latest commit

ย 

History

History
422 lines (247 loc) ยท 17.6 KB

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 ์˜์—ญ์ด ์‚ฌ๋ผ์ง„ ์ด์œ ๋ฅผ ์•„์‹œ๋‚˜์š”?