Java Virtual Machine

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์—”์ง„

Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

Java Application

JVM(Windows/Mac/Linux)

OS(Windows/Mac/Linux)

Computer(Hardware)

์ž๋ฐ”์˜ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ€์ƒ ํ™˜๊ฒฝ์ธ JVM์˜ ์กด์žฌ์ธ๋ฐ, Computer -> OS -> JVM -> Java Application ๋ ˆ์ด์–ด ํ˜•ํƒœ๋กœ JVM ์œ„์—์„œ ์‹คํ–‰๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ์ธํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

  • ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ: JVM ์œ„์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋Š ํ”Œ๋žซํผ์ด๋“  ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ

  • JVM ํ•„์ˆ˜ ์กฐ๊ฑด: ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ JVM์ด ํ•„์š”ํ•จ

  • ์„ฑ๋Šฅ ์ด์Šˆ: JVM ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋Š๋ฆด ์ˆ˜ ์žˆ์Œ(์ตœ๊ทผ์—” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ตœ์ ํ™” ๊ธฐ์ˆ ๋กœ ๊ทธ ์†๋„์˜ ๊ฒฉ์ฐจ๋ฅผ ๋งŽ์ด ์ค„์ž„)

Java ์‹คํ–‰ ๊ณผ์ •

  • Java Compiler: Java Source Code๋ฅผ Java Byte Code๋กœ ๋ณ€ํ™˜

  • Class Loader: ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋กœ๋”ฉ / ๊ฒ€์ฆ / ๋งํ‚น ๋“ฑ ์ˆ˜ํ–‰

  • Runtime Data Area: ์•ฑ ์‹คํ–‰์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • Execution Engine: ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ํ•ด๋‹นํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰

  1. ์ž‘์„ฑ๋œ Java Source๋ฅผ Java Compiler๋ฅผ ํ†ตํ•ด Java Byte Code๋กœ ๋ณ€ํ™˜

  2. ์ปดํŒŒ์ผ ๋œ Byte Code๋ฅผ JVM์˜ Class Loader์— ์ „๋‹ฌ

  3. Class Loader๋Š” Dynamic Loading์„ ํ†ตํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉ ๋ฐ ๋งํฌํ•˜์—ฌ Runtime Data Area(JVM Memory)๋กœ ์ „๋‹ฌ

  4. Execution Engine์ด ์˜ฌ๋ผ์˜จ Byte Code๋“ค์„ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰

Class Loader์—์„œ Class Loading ๊ณผ์ •

ํด๋ž˜์Šค ๋กœ๋”๋Š” ์ปดํŒŒ์ผ๋œ ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ(*.class)์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋“œํ•˜๊ณ , Runtime Data Area์— ๋ฐฐ์น˜ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. class ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜๋Š” ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Loading: ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์—ฌ JVM ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

  2. Linking: ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฒ€์ฆ

  3. Initialization: ํด๋ž˜์Šค ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”

ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” Loading ๋‹จ๊ณ„์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ทœ์น™์— ๋”ฐ๋ผ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด๋“ค์ธ๋‹ค.

  • ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋งŒ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

  • static ๋ฉค๋ฒ„๋“ค ๋˜ํ•œ ์ „๋ถ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํด๋ž˜์Šค ๋‚ด์˜ static ๋ฉค๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ํด๋ž˜์Šค๊ฐ€ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

JDK & JRE & JVM

  • JVM(Java Virtual Machine): ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๋จธ์‹ 

  • JRE(Java Runtime Environment): ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ(ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ•„์ˆ˜ ํŒŒ์ผ)๊ฐ€ ํฌํ•จ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ

  • JDK(Java Development Kit): ์ž๋ฐ”๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ•„์š” ์š”์†Œ(javac ๋“ฑ)๋ฅผ ํฌํ•จํ•œ ๊ฐœ๋ฐœ ํ‚คํŠธ

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

JVM ๋ฉ”๋ชจ๋ฆฌ๋Š” ํฌ๊ฒŒ 5๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, ๊ฐ๊ฐ์˜ ์˜์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜์—ญ์šฉ๋„์ƒ๋ช… ์ฃผ๊ธฐ์Šค๋ ˆ๋“œ ๊ณต์œ  ์—ฌ๋ถ€

Method

ํด๋ž˜์Šค ์ •๋ณด, ํด๋ž˜์Šค(static) ๋ณ€์ˆ˜, ์ƒ์ˆ˜, ๋ฉ”์†Œ๋“œ ์ฝ”๋“œ

JVM ์‹œ์ž‘ ~ ์ข…๋ฃŒ

O

Heap

๊ฐ์ฒด ์ธ์Šคํ„ด์Šค, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

Gabage Collection์— ์˜ํ•ด ๊ด€๋ฆฌ

O

Stack

์“ฐ๋ ˆ๋“œ ๋ณ„๋กœ ๋Ÿฐํƒ€์ž„์— ํ˜ธ์ถœ ๋œ ๋ฉ”์„œ๋“œ, ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ ๋ณ€์ˆ˜, ๋ฆฌํ„ด ๊ฐ’

๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ์‹œ

X

์ด์™ธ์—๋„ ์“ฐ๋ ˆ๋“œ์˜ ๋ช…๋ น์–ด ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜๋Š” PC Register ์ž๋ฐ” ์™ธ์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” Native Method Stack์ด ์กด์žฌํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

Last updated