Java Virtual Machine

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

"Java๊ฐ€ ๋ญ์•ผ?"๋ผ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›์•˜์„ ๋•Œ, ๊ฐ„๋‹จํžˆ "ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด"๋ผ๊ณ  ๋Œ€๋‹ตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Java๋Š” ๋‹จ์ˆœํžˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ •์˜ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด๋‚˜ ํฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. Java๋Š” 'Write Once, Run Everywhere'๋ผ๋Š” ์ฒ ํ•™์œผ๋กœ ์‹œ์ž‘๋˜์–ด ๋ฐœ์ „ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ด ์ฒ ํ•™์„ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Java๋Š” ๋„ค ๊ฐ€์ง€ ์ƒํ˜ธ ์—ฐ๊ด€๋œ ๊ธฐ์ˆ ์„ ์—ฎ์–ด๋†“์•˜์Šต๋‹ˆ๋‹ค:

  1. The Java Programming Language

  2. The Java Class File Format

  3. The Java Application Programming Interface (Java API)

  4. The Java Virtual Machine (JVM)

์ด ๋„ค ๊ฐ€์ง€ ๊ธฐ์ˆ ์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์—, Java๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Eclipse๋‚˜ NetBeans ๊ฐ™์€ IDE ํ™˜๊ฒฝ์ด๋‚˜ ๋ฉ”๋ชจ์žฅ ๊ฐ™์€ ํ…์ŠคํŠธ ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, .java ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด Java ์†Œ์Šค ํŒŒ์ผ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋งŒ์„ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ผ ๋ฟ, ์ž์ฒด๋กœ๋Š” ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปดํŒŒ์ผ์„ ํ†ตํ•ด .class ํŒŒ์ผ์˜ ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ '์ปดํŒŒ์ผ(Compile)'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ๋Š” ๋ณดํ†ต JDK์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” 'javac' ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ๊ฑฐ์น˜๋ฉด ์†Œ์Šค ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์ด์ง€๋งŒ .class ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด .class ํŒŒ์ผ์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋ผ๋Š” ๊ฒƒ์€ ๋‹จ์ง€ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด์ง€, exe ํŒŒ์ผ์ฒ˜๋Ÿผ ๋”๋ธ”ํด๋ฆญ์„ ํ•˜๊ฑฐ๋‚˜ ํ”„๋กฌํ”„ํŠธ ์ƒ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์„ ์ฃผ๊ณ  ์—”ํ„ฐ๋ฅผ ์นœ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œํ•œ JRE(Java Runtime Environment)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  JDK์—์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. JDK์—๋Š” JRE๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 'java'๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ .class ํŒŒ์ผ์„ ์ธ์ˆ˜๋กœ ์ œ๊ณตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ 'java' ํ”„๋กœ๊ทธ๋žจ์€ Java ์‹คํ–‰ ํ™˜๊ฒฝ์— .class ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜๊ณ , Java Virtual Machine(JVM)์„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์˜ฌ๋ฆฌ๋Š” ์ž‘์—…์„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋ถ„์„ํ•˜์—ฌ JRE ๋‚ด์˜ Java Application Programming Interface(Java API)์™€ ํ•จ๊ป˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„์˜ ๊ณผ์ • ์ค‘์—์„œ .java๋ผ๋Š” ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ์†Œ์Šค ํŒŒ์ผ๋กœ .class ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์„ '์ปดํŒŒ์ผ ํƒ€์ž„(Compile Time)'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ์„ ๊ฑฐ์ณ ์ƒ์„ฑ๋œ .class ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์„ '๋Ÿฐํƒ€์ž„(Run Time)'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ Java ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€๋ฅผ ๋„์‹ํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ทธ๋ฆผ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ Java๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ๊ธฐ์ˆ ๋“ค์ด ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ ๊ฒƒ์€ Java Programming Language์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๋ฉด Java Class File Format์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Java Virtual Machine์„ ๊ตฌ๋™์‹œ์ผœ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

JVM์œผ๋กœ ๋กœ๋”ฉ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹จ๋…์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Java Application Programming Interface์™€ ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋น„๋กœ์†Œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋„ค ๊ฐ€์ง€ ๊ธฐ์ˆ ์€ ๊ฐ๊ฐ ์–ด๋–ค ๊ฒƒ์ด๋ฉฐ ์ด๋“ค์ด ์–ด๋–ป๊ฒŒ Java์˜ ์ฒ ํ•™์„ ์‹คํ˜„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

The Java Programming Language

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

ํŠนํžˆ, Java์˜ Class ํŒŒ์ผ์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, JVM์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ฒˆ์—ญ๋œ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” JVM ์œ„์—์„œ ๋‹ค์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰์„ ์œ„ํ•œ ๋งํฌ ์ž‘์—…์€ ๊ทธ๋•Œ ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Class ํŒŒ์ผ์€ ์‹คํ–‰ ์‹œ ๋งํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก Symbolic Reference๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด Symbolic Reference๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—์„œ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๋กœ ๋Œ€์ฒด๋˜๋Š” ์ž‘์—…์ธ ๋งํฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ '๋™์  ๋งํฌ(Dynamic Linking)'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด Dynamic Linking ๊ธฐ์ˆ  ๋•๋ถ„์— Class ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java์˜ ์ฒ ํ•™์„ ๊ตฌํ˜„ํ•˜๋Š” ์˜๋ฏธ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. Java๋Š” ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋Š” ์ž‘์„์ˆ˜๋ก ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

The Java Class File Format

Java๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด Class ํŒŒ์ผ๋กœ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ Class ํŒŒ์ผ์€ ๋‹ค์Œ์˜ ๋„ค ๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • Compactํ•œ ํ˜•ํƒœ

  • Bytecode๋กœ์˜ ๋ณ€๊ฒฝ

  • ํ”Œ๋žซํผ ๋…๋ฆฝ์ 

  • ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์˜ค๋”์˜ ์‚ฌ์šฉ

Java์˜ ์ฒ ํ•™์„ ๊ฐ€์žฅ ๋‘๋“œ๋Ÿฌ์ง€๊ฒŒ ๋Œ€๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ด Class File Format์ž…๋‹ˆ๋‹ค. Class ํŒŒ์ผ์€ Bytecode๋ฅผ Binary ํ˜•ํƒœ๋กœ ๋‹ด์•„๋†“์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Bytecode๋Š” JVM์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, Java์—์„œ ์ปดํŒŒ์ผ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์˜ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ Java ์–ธ์–ด๋ฅผ JVM์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

JVM์€ Class๋ฅผ ๋กœ๋”ฉํ•œ ํ›„ ์—ฌ๊ธฐ์„œ Bytecode๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์„(Interpret)ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. Class๊ฐ€ ๋กœ๋“œ๋œ ํ›„์—๋Š” JIT(Just-In-Time) Compiler๋‚˜ Hotspot Compiler์™€ ๊ฐ™์€ Execution Engine์„ ๊ฑฐ์ณ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Bytecode๋Š” Java์˜ ์ฒ ํ•™์„ ์‹คํ˜„ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Bytecode๊ฐ€ JVM์„ ์œ„ํ•œ ์–ธ์–ด๋ผ๋Š” ์ , ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ Bytecode์˜ Binary ํ˜•ํƒœ๋กœ ์‹ค์ฒดํ™”๋œ Class๋ผ๋Š” ๊ฒƒ, ์ด๊ฒƒ์ด ํ”Œ๋žซํผ์˜ ์ œ์•ฝ์„ ๋›ฐ์–ด๋„˜์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

The Java Application Interface

Java Application Interface, ์ฆ‰ Java API๋Š” ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ง‘ํ•ฉ์œผ๋กœ, Java ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์˜ ์ž์›๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Java API๋Š” OS ์‹œ์Šคํ…œ๊ณผ Java ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ๊ฐ€๊ต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Java API๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด OS ์ž์›๊ณผ ์—ฐ๊ณ„๋˜์–ด ์žˆ์œผ๋ฉฐ, Java ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋งž๋‹ฟ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Java ํ”„๋กœ๊ทธ๋žจ์€ ํ”Œ๋žซํผ์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

The Java Virtual Machine (JVM)

Java์˜ ๋„ค ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๊ฒƒ์€ ๋‹จ์—ฐ Java Virtual Machine(JVM)์ž…๋‹ˆ๋‹ค. JVM์€ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ, ๋ฌผ๋ฆฌ์ ์ธ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์กด์žฌํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ๊ฐœ๋…์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. JVM์€ ์ •์˜๋œ ์ŠคํŽ™(Specification)์„ ๊ตฌํ˜„ํ•œ ๋…์ž์ ์ธ Runtime Instance์ž…๋‹ˆ๋‹ค.

JVM์˜ ์—ญํ• ์€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Class ํŒŒ์ผ์„ JVM์œผ๋กœ ๋กœ๋”ฉํ•˜๊ณ  Bytecode๋ฅผ ํ•ด์„(Interpret)ํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ •๋ณด ์ฒ˜๋ฆฌ ์ž‘์—…์„ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ JVM์€ Thread ๊ด€๋ฆฌ ๋ฐ Garbage Collection๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์žฌ์ƒ ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

JVM์˜ ๊ธฐ๋ณธ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

JVM์€ ClassLoader System์„ ํ†ตํ•ด ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋”ฉ๋œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์€ Execution Engine์„ ํ†ตํ•ด ํ•ด์„๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„๋œ ํ”„๋กœ๊ทธ๋žจ์€ Runtime Data Areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํ–‰ ๊ณผ์ • ์†์—์„œ JVM์€ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ Garbage Collection ๊ฐ™์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ์ฑ…์˜ ์ „๋ฐ˜๋ถ€๋Š” JVM์˜ ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” JVM์˜ ๊ฐ ๋ชจ๋“ˆ์„ ์„ค๋ช…ํ•˜๋Š” ์‹์œผ๋กœ ์ „๊ฐœํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Last updated