๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป Extracurricular/๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ11๊ธฐ

[ํŒ€ ์Šคํ„ฐ๋””] JAVA / CS

 

 

 

JVM ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

 

โœ… JVM(Java Virtual Machine)์ด๋ž€?

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ! โžก๏ธ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด

์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ .class ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค๋ฉด ์ด ์ฝ”๋“œ๊ฐ€ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋œ๋‹ค.

 

1๏ธโƒฃ JVM(Java Virtual Machine)์˜ ์žฅ์ 

Java๋Š” ์–ด๋– ํ•œ ํ”Œ๋žซํผ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ โžก๏ธ JVM์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ฝ”๋“œ(.class)๋กœ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋™์ž‘ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ

.class ํŒŒ์ผ์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ, ์‚ฌ๋žŒ์ด ์“ฐ๋Š” ์ž๋ฐ” ์ฝ”๋“œ์—์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ๋Š” ๊ธฐ๊ณ„์–ด๋กœ์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„!

 

 

C์–ธ์–ด์˜ ๊ฒฝ์šฐ

C์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ likelion.c๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์ด likelion.c๋ฅผ ์œˆ๋„์šฐ์—์„œ ์ปดํŒŒ์ผํ•˜๋ฉด likelion.exe๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์œˆ๋„์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ๊ธฐ์— likelion.exe๋Š” ์œˆ๋„์šฐ์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์ด๋‹ค. ์ฆ‰ ๋ฆฌ๋ˆ…์Šค ์šด์˜์ฒด์ œ์™€ ๊ฐ™์ด ์ปดํŒŒ์ผ ํ”Œ๋žซํผ๊ณผ ํƒ€๊ฒŸ ํ”Œ๋žซํผ์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ ์ด likelion.exe ํŒŒ์ผ์„ ๋ฆฌ๋ˆ…์Šค์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด -๋ฆฌ๋ˆ…์Šค ์šด์˜์ฒด์ œ์— ๋งž๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

 

Java์˜ ๊ฒฝ์šฐ

Java์˜ ๊ฒฝ์šฐ์—๋Š” Java์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ likelion.java๋Š” ์ปดํŒŒ์ผํ•˜๋ฉด likelion.class ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๊ฐ์ž์˜ ํ”Œ๋žซํผ์— ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์ด ์šด์˜์ฒด์ œ์— ๋งž๋Š” ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ฆ‰ Java์—์„œ๋Š” C์–ธ์–ด์™€๋Š” ๋‹ฌ๋ฆฌ JVM์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ž์˜ ํ”Œ๋žซํผ์— ๋งž๊ฒŒ๋” ์ปดํŒŒ์ผ์„ ๋”ฐ๋กœ๋”ฐ๋กœ ํ•ด์ค˜์•ผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

โ€ป Java๋Š” ํ”Œ๋žซํผ์— ์ข…์†์ ์ด์ง€ ์•Š์ง€๋งŒ, JVM์€ ํ”Œ๋žซํผ์— ์ข…์†์ ์ด๋‹ค.

์ฆ‰ ๋ฆฌ๋ˆ…์Šค์˜ JVM๊ณผ ์œˆ๋„์šฐ์˜ JVM์€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค. ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ๋งŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ผํด์€ ๋Œ€๋ถ€๋ถ„์˜ ์ฃผ์š” ์šด์˜์ฒด์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›น ๋ธŒ๋ผ์šฐ์ €, ์Šค๋งˆํŠธ ํฐ, ๊ฐ€์ „๊ธฐ๊ธฐ ๋“ฑ์—์„œ๋„ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์†์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

 


โœ… JVM ๊ตฌ์กฐ

 

โžก๏ธ ์ž๋ฐ” ๋™์ž‘ ๋ฐฉ์‹

1. ์ž๋ฐ”๋กœ ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด JVM์€ OS๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

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

3. Class Loader๋ฅผ ํ†ตํ•ด JVM Runtime Data Area๋กœ ๋กœ๋”ฉํ•œ๋‹ค.

4. Runtime Data Area์— ๋กœ๋”ฉ ๋œ .class๋“ค์€ Execution Engine์„ ํ†ตํ•ด ํ•ด์„ํ•œ๋‹ค.

5. ํ•ด์„๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” Runtime Data Area์˜ ๊ฐ ์˜์—ญ์— ๋ฐฐ์น˜๋˜์–ด ์ˆ˜ํ–‰ํ•˜๋ฉฐ,

    ์ด ๊ณผ์ •์—์„œ Execution Engine์— ์˜ํ•ด GC์˜ ์ž‘๋™๊ณผ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

1๏ธโƒฃ ํด๋ž˜์Šค ๋กœ๋” : ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•ด์ฃผ๋Š” ์—ญํ• 

์ž๋ฐ”๋Š” ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ฝ์–ด์˜ค๋ฏ€๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ธ ๋Ÿฐํƒ€์ž„์—์„œ์•ผ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ์—ฐ๊ฒฐ๋œ๋‹ค. ์ž๋ฐ”์—์„œ ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ•˜๋ฉด .javaํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ  .java์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•˜๋ฉด .classํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š”๋ฐ ํด๋ž˜์Šค ๋กœ๋”๋Š” .class ํŒŒ์ผ์„ ๋ฌถ์–ด์„œ JVM์ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Runtime Data Area๋กœ ์ ์žฌํ•œ๋‹ค.

 

2๏ธโƒฃ ์‹คํ–‰ ์—”์ง„ : ๋กœ๋“œ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ๋ชจ๋“ˆ

ํด๋ž˜์Šค ๋กœ๋”์— ์˜ํ•ด JVM์œผ๋กœ ๋กœ๋“œ๋œ .class ํŒŒ์ผ๋“ค์€ Runtime Data Areas์˜ Method Area์— ๋ฐฐ์น˜๋˜๋Š”๋ฐ, ๋ฐฐ์น˜๋œ ์ดํ›„์— JVM์€ Method Area์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์—”์ง„(Execution Engine)์— ์ œ๊ณตํ•˜์—ฌ, ์ •์˜๋œ ๋‚ด์šฉ๋Œ€๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์‹คํ–‰ ์—”์ง„์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค.

 

3๏ธโƒฃ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ :  Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒ์„ฑ(์ ์žฌ)๋œ ๊ฐ์ฒด๋“ค ์ค‘์— ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ ํ›„ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• 

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋”๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ, ๋”์šฑ ์†์‰ฝ๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒ์„ฑ(์ ์žฌ)๋œ ๊ฐ์ฒด๋“ค ์ค‘์— ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ ํ›„ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, GC์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋“ค์€ ์ผ์‹œ์ •์ง€์ƒํƒœ๊ฐ€ ๋œ๋‹ค.


โœ… ์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ ์žฌํ•˜๋Š” ์˜์—ญ

 

โžก๏ธ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉ (GC์˜ ๋Œ€์ƒ)

  • ํž™ ์˜์—ญ (Heap Area)
  • ๋ฉ”์„œ๋“œ ์˜์—ญ(Method Area)

 

โžก๏ธ ์Šค๋ ˆ๋“œ(Thread) ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ

  • ์Šคํƒ ์˜์—ญ(Stack Area)
  • PC ๋ ˆ์ง€์Šคํ„ฐ (PC Register)
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ(Native Method Stack)

 

1๏ธโƒฃ ๋ฉ”์„œ๋“œ ์˜์—ญ

ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ ‘๊ทผ ์ œ์–ด์ž ์ •๋ณด์™€ ๊ฐ™์€ ๊ฐ์ข… ํ•„๋“œ ์ •๋ณด๋“ค๊ณผ

๋ฉ”์„œ๋“œ ์ •๋ณด, ๋ฐ์ดํ„ฐ Type ์ •๋ณด, Constant Pool, static๋ณ€์ˆ˜, final class ๋“ฑ์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ

 

2๏ธโƒฃ ํž™ ์˜์—ญ

new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ (์ฃผ๊ธฐ์ ์œผ๋กœ GC๊ฐ€ ์ œ๊ฑฐํ•˜๋Š” ์˜์—ญ)

Heap Area๋Š” ํšจ์œจ์ ์ธ GC๋ฅผ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด ํฌ๊ฒŒ Young / Tenured / Permanent Generation 3๊ฐ€์ง€์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

 

1) Young Generation ์˜์—ญ : ์ž๋ฐ” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ž๋งˆ์ž ์ €์žฅ๋˜๊ณ , ์ƒ๊ธด์ง€ ์–ผ๋งˆ ์•ˆ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„

Heap ์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ตœ์ดˆ๋กœ Eden ์˜์—ญ์— ํ• ๋‹น๋˜๊ณ , ์ด ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋Š์ •๋„ ์Œ“์ด๊ฒŒ ๋˜๋ฉด ์ฐธ์กฐ์ •๋„์— ๋”ฐ๋ผ Servivor์˜ ๋นˆ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™๋˜๊ฑฐ๋‚˜ ํšŒ์ˆ˜๋œ๋‹ค.

 

2) Minor GC : Young Generation๊ณผ Tenured Generation ์—์„œ์˜ GC

Young Generation(Eden+Servivor) ์˜์—ญ์ด ์ฐจ๊ฒŒ ๋˜๋ฉด ๋˜ ์ฐธ์กฐ์ •๋„์— ๋”ฐ๋ผ Old์˜์—ญ์œผ๋กœ ์ด๋™ ๋˜๊ฒŒ ๋˜๊ฑฐ๋‚˜ ํšŒ์ˆ˜๋œ๋‹ค.

 

3) Major GC : 'Stop-the-World'๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  Old์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” GC

Old์˜์—ญ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ์น˜๋ฅผ ๋„˜๊ฒŒ ๋˜๋ฉด, Old ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ด๋•Œ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์ž‘์—…์„ ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ 'Stop-the-World' ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

3๏ธโƒฃ์Šคํƒ ์˜์—ญ

์ง€์—ญ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฆฌํ„ด ๊ฐ’, ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋Š” ์ž„์‹œ ๊ฐ’ ๋“ฑ์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ

 

 

4๏ธโƒฃ PC ๋ ˆ์ง€์Šคํ„ฐ

Thread๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ, ์ฆ‰ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์˜ ์ฃผ์†Œ์™€ ๋ช…๋ น์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์˜์—ญ

 

 

5๏ธโƒฃ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ (Native Method Stack)

1. ์ž๋ฐ” ์ด์™ธ์˜ ์–ธ์–ด(C, C++, ์–ด์…ˆ๋ธ”๋ฆฌ ๋“ฑ)๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ C ์Šคํƒ์„ ์‚ฌ์šฉ

2. ์ž๋ฐ” ์ธํ„ฐํ”„๋ฆฌํ„ฐ : ๋ณดํ†ต C/C++ ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์„ ๋งํ•˜๋ฉฐ, ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋œ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ํ•ด์„ํ•˜๋Š” ์—ญํ• 


โœ… ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ (Garbeage Collection)

์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ JVM์˜ Heap ์˜์—ญ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘ ํ•„์š” ์—†๊ฒŒ ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

 

โžก๏ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด๋“ค

๊ฐ์ฒด๋“ค์€ ์‹ค์งˆ์ ์œผ๋กœ Heap์˜์—ญ์—์„œ ์ƒ์„ฑ๋˜๊ณ  Method Area์ด๋‚˜ Stack Area๋“ฑ Root Area์—์„œ๋Š” Heap Area์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋งŒ ์ฐธ์กฐํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ Heap Area์˜ ๊ฐ์ฒด๋“ค์ด ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๋Š” ๋“ฑ์˜ ํŠน์ • ์ด๋ฒคํŠธ๋“ค๋กœ ์ธํ•˜์—ฌ Heap Area ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์‚ญ์ œ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด Heap์˜์—ญ์—์„œ ์–ด๋””์„œ๋“  ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋“ค์„ Unreachableํ•˜๋‹ค๊ณ  ํ•˜๋ฉฐ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ œ๊ฑฐํ•œ๋‹ค.

 

Reachable : ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
Unreachable  : ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํƒœ (GC์˜ ๋Œ€์ƒ์ด ๋จ) 

 

โžก๏ธ ์žฅ์ 

C๋‚˜ C++์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์—†์–ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ˆ˜๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ์ผ์ผ์ด ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด, Java๋Š” JVM์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋Œ€ํ–‰ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฌธ์ œ์—์„œ ๋Œ€ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด ์˜ค๋กฏ์ด ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โžก๏ธ ๋‹จ์ 

1. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ธ์ œ ํ•ด์ œ๋˜๋Š”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์—†๋‹ค.

2. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ์—๋Š” JVM์˜ ๋‹ค๋ฅธ ๋™์ž‘์„ ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

GC๊ฐ€ ๋„ˆ๋ฌด ์ž์ฃผ ์‹คํ–‰๋˜๋ฉด ์†Œํ”„ํŠธ์›จ์–ด ์„ฑ๋Šฅ ํ•˜๋ฝ์˜ ๋ฌธ์ œ๊ฐ€ ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ž ๊น์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ผ์‹œ์ •์ง€๋กœ๋„ ๋ชฉํ‘œํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GC์˜ ์‚ฌ์šฉ์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

 

โžก๏ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด๋“ค

1๏ธโƒฃ ์ฒซ ๋ฒˆ์งธ ๊ณผ์ •

๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋˜๊ณ  Heap์˜์—ญ์˜ Eden์— age-bit 0์œผ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด age-bit๋Š” Minor GC์—์„œ ์‚ด์•„๋‚จ์„ ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

 

2๏ธโƒฃ ๋‘ ๋ฒˆ์งธ ๊ณผ์ •

์‹œ๊ฐ„์ด ์ง€๋‚˜ Heap Area์˜ Eden ์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ๋‹ค ์Œ“์ด๊ฒŒ ๋˜๋ฉด Minor GC๊ฐ€ ํ•œ๋ฒˆ ์ผ์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ์ฐธ์กฐ ์ •๋„์— ๋”ฐ๋ผ Servivor0 ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ํšŒ์ˆ˜๋œ๋‹ค.

 

3๏ธโƒฃ ์„ธ ๋ฒˆ์งธ ๊ณผ์ •

๊ณ„์†ํ•ด์„œ Eden์˜์—ญ์—๋Š” ์‹ ๊ทœ ๊ฐ์ฒด๋“ค์ด ์ƒ์„ฑ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜ Eden์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ๋‹ค ์Œ“์ด๊ฒŒ ๋˜๋ฉด Young Generation ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ๋น„์–ด์žˆ๋Š” Survival์ธ Survival1 ์˜์—ญ์— ์ด๋™ํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์€ age๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

 

4๏ธโƒฃ ๋„ค ๋ฒˆ์งธ ๊ณผ์ •

๋˜๋‹ค์‹œ Eden ์˜์—ญ์— ์‹ ๊ทœ ๊ฐ์ฒด๋“ค๋กœ ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด ๋‹ค์‹œํ•œ๋ฒˆ minor GC๊ฐ€ ์ผ์–ด๋‚˜๊ณ  Young Generation(Eden+Servivor) ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ๋น„์–ด์žˆ๋Š” Survival์ธ Survival0์œผ๋กœ ์ด๋™์‹œํ‚จ ๋’ค age๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ์ด ๊ณผ์ •์„ ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

5๏ธโƒฃ ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ณผ์ •

์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค ๋ณด๋ฉด age bit๊ฐ€ ํŠน์ • ์ˆซ์ž ์ด์ƒ์œผ๋กœ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋•Œ JVM์—์„œ ์„ค์ •ํ•ด๋†“์€ age bit์— ๋„๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด ์˜ค๋žซ๋™์•ˆ ์“ฐ์ผ ๊ฐ์ฒด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  Old generation ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ์ด ๊ณผ์ •์„ ํ”„๋กœ๋ชจ์…˜(Promotion)์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

6๏ธโƒฃ ๋งˆ์ง€๋ง‰ ๊ณผ์ •

์‹œ๊ฐ„์ด ์ง€๋‚˜ Old์˜์—ญ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ์น˜๋ฅผ ๋„˜๊ฒŒ ๋˜๋ฉด, Old ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค. Major GC๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๊ณ  ์ด๋•Œ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์ž‘์—…์„ ๋ฉˆ์ถ”๋Š” 'Stop-the-World'๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


โœ… JAVA์˜ ์‹คํ–‰๋ฐฉ์‹

1๏ธโƒฃ ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ

Java ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ๋Š ์ด ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ".java" ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„๋‹ค.

 

2๏ธโƒฃ ์ปดํŒŒ์ผ

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด ์ž‘์—…์€ javac๋ผ๋Š” Java ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋ถ„์„ํ•œ ํ›„, ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ".class" ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

 

3๏ธโƒฃ ํด๋ž˜์Šค ๋กœ๋”ฉ

JVM์€ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋”ฉํ•œ๋‹ค. ํด๋ž˜์Šค ๋กœ๋”๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์—ฌ JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. JVM ๋‚ด๋ถ€์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Execution Engine์ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ Class Loader์— ์š”์ฒญํ•˜๊ณ  Class Loader๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ .class์—์„œ ๊ฐ€์ ธ์™€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค. (๋กœ์ปฌ ๋””์Šคํฌ์—์„œ .class ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. - URLClassLoader)

 

4๏ธโƒฃ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๊ฒ€์ฆ

๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค๋“ค์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์ด ์ด์ƒ์ด ์—†๋Š”์ง€, ์ž๋ฐ”์˜ ๋ณด์•ˆ ๊ทœ์น™์„ ์œ„๋ฐฐํ•˜์ง€ ์•Š๋Š”์ง€ ๊ฒ€์‚ฌ๋ฅผ ํ•œ๋‹ค. (์ž๋ฐ”๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•˜์—ฌ ์ „์†ก๋œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํ“จํ„ฐ๋ฅผ ํ›ผ์†์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ ํ•˜๊ธฐ ์œ„ํ•ด ์—„๊ฒฉํ•œ ๋ณด์•ˆ ๊ทœ์น™์„ ๊ฐ–๊ณ ์žˆ๋‹ค.)

 

5๏ธโƒฃ ์‹คํ–‰

Execution Engine์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค. ์‹คํ–‰ํ•˜๋ฉด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋œ๋‹ค. ๊ณ„์† ์ด๋Ÿฌํ•œ ๋™์ž‘์„ ํ•˜๋ฉด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•œ๋‹ค.