์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
JVM์—์„œ ๋„˜์–ด์˜ด
1. ๊ฐœ์š”2. ์ข…๋ฅ˜3. ๊ตฌ์กฐ4. ์„ฑ๋Šฅ
4.1. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (GC)
5. JVM ๊ธฐ๋ฐ˜ ์–ธ์–ด
5.1. ๊ธฐ์กด ์–ธ์–ด์˜ JVM ๊ตฌํ˜„5.2. JVM ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด5.3. ๊ด€๋ จ ๋ฌธ์„œ
6. ๊ด€๋ จ ๋ฌธ์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

Java๋กœ ๊ฐœ๋ฐœํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ๋จธ์‹ . JRE(Java Runtime Environment)์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, Java ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด Java ๊ฐ€์ƒ ๋จธ์‹ ์€ ์ฝ”๋“œ ์ตœ์ ํ™”์™€ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. Java์™€ ํ•จ๊ป˜ ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ ์ฌ์ด ์˜ค๋ผํด์— ์ธ์ˆ˜๋œ ํ›„ ํ˜„์žฌ๋Š” ์˜ค๋ผํด์ด Java ๋ช…์นญ์„ ๋น„๋กฏํ•˜์—ฌ ๋ชจ๋“  ๊ถŒํ•œ์„ ํ–‰์‚ฌํ•˜๊ณ  ์žˆ๋‹ค. Java ์†Œ์Šค ์ฝ”๋“œ๋Š” javac ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฑฐ์ณ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” JRE์— ๋“ค์–ด์žˆ๋Š” java classloader์— ์˜ํ•ด JVM์œผ๋กœ ์ ์žฌ๋˜๊ณ  JVM์€ ์ ์žฌ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ JIT ์ปดํŒŒ์ผ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

JVM์€ ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์œผ๋กœ, JVM์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์–ด๋””์„œ๋“  Java ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ฆ‰, Java์˜ ๋ชจํ† ์ธ Write once, Run anywhere๋Š” JVM์„ ํ†ตํ•ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ • ์šด์˜์ฒด์ œ์˜ ํŠน์ˆ˜ํ•œ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ œ์–ดํ•˜๋Š” ๋“ฑ์˜ ์ผ์€ JVM์œผ๋กœ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, JNI ๊ฐ™์€ Native ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. ์ฆ‰ ์ผ์ข…์˜ ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์ธ ์…ˆ.

Java ๊ฐ€์ƒ๋จธ์‹ ์ด๋ผ๊ณ  ํ•ด์„œ Java ๋ฐ”์ดํŠธ์ฝ”๋“œ๋งŒ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ Java๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค[1]์„ ๊ฐ€์ง€๊ณ ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ง€๊ธˆ์˜ Java ๊ฐ€์ƒ๋จธ์‹ ์€ Java๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ์ด๋ฆ„์ด Java ๊ฐ€์ƒ๋จธ์‹ ์ด๋‹ค ๋ณด๋‹ˆ Java์— ์ข…์†๋œ ๊ฒŒ ์•„๋‹Œ๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€๋„ ์•Š๋‹ค. Java ๊ฐ€์ƒ๋จธ์‹ ์€ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ด๋„ ์ฝ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์Šค์นผ๋ผ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ด๋„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ๊ธฐ๋ณธ์ด Java๋ฅผ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— Java ์†Œ์Šค ์ฝ”๋“œ์™€ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๋น„๊ต์  ์ง๊ด€์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์ง€๋งŒ, ์ฝ”ํ‹€๋ฆฐ์ด๋‚˜ ์Šค์นผ๋ผ์˜ ๊ฒฝ์šฐ Java์™€์˜ ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•˜๊ธด ํ–ˆ์–ด๋„ ์ƒ๋Œ€์ ์œผ๋กœ๋Š” ๋น„์ง๊ด€์ ์ด๋ฉฐ ํ•„์—ฐ์ ์œผ๋กœ Java๋ฅผ ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

.NET Framework์™€ ํ•จ๊ป˜ ๊ฐ€์ƒ๋จธ์‹  ์–ธ์–ด ์‹œ์žฅ์„ ์‚ฌ์‹ค์ƒ ์–‘๋ถ„ํ•˜๊ณ  ์žˆ๋‹ค.

2. ์ข…๋ฅ˜[ํŽธ์ง‘]

์˜ค๋ผํด์ด ์†Œ์œ ํ•œ ๋‘ ์ข…๋ฅ˜์˜ JVM์œผ๋กœ ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์—์„œ ๊ฐœ๋ฐœ๋œ HotSpot๊ณผ BEA ์‹œ์Šคํ…œ์—์„œ ๊ฐœ๋ฐœ๋œ JRockit, IBM J9์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Eclipse OpenJ9์ด ์žˆ๋‹ค, ํด๋ฆฐ ๋ฃธ ๊ตฌํ˜„์—๋Š” Kafee์™€ IBM์‚ฌ์˜ IBM J9๊ฐ€ ์žˆ๋‹ค. ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค ๋“ฑ์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ HotSpot์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ, IBM AIX๋ฅผ ์šด์˜์ฒด์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ IBM J9๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋œ๋‹ค.

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

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ๋„ JVM์„ ๋‚ด๋†“์€ ์ ์ด ์žˆ์—ˆ๋‹ค. Java Applet ์‹คํ–‰์„ ์œ„ํ•ด Internet Explorer 3๋ถ€ํ„ฐ ์ œ๊ณตํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 1997๋…„ ์ฌ์—๊ฒŒ ๊ณ ์†Œ๋‹นํ–ˆ๋Š”๋ฐ, ์ด๋Š” MS๊ฐ€ Java 1.1 ํ‘œ์ค€์„ ๋ฌด์‹œํ•œ ์ฑ„ ์ž์‹ ๋“ค ์ž…๋ง›๋Œ€๋กœ ๋œฏ์–ด๊ณ ์ณค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.[3] ๊ฒฐ๊ตญ 2001๋…„ MS๊ฐ€ ํŒจ์†Œํ•˜๋ฉด์„œ ์ž์‚ฌ์˜ ์ œํ’ˆ์—์„œ MS-JVM์„ ๋‹จ๊ณ„์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋„๋ก ํ•ฉ์˜ํ•˜์˜€์œผ๋ฉฐ, 2003๋…„ ๋ฐฐํฌ๋œ Windows XP ์„œ๋น„์Šค ํŒฉ 1a๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋Š” 2007๋…„๊นŒ์ง€ ์ง€์›๋˜์—ˆ๋‹ค.

3. ๊ตฌ์กฐ[ํŽธ์ง‘]


4. ์„ฑ๋Šฅ[ํŽธ์ง‘]

๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์‹ค์ œ์˜ ๊ธฐ๊ณ„์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JVM์˜ ํ•ด์„ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์‹คํ–‰๋˜๋ฏ€๋กœ Java๋กœ ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด[4]๋ณด๋‹ค ์‹คํ–‰ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ธํ„ฐํ”„๋ฆฌํŠธํ•˜์—ฌ ๋งค์šฐ ๋А๋ ธ์œผ๋‚˜ ํ˜„์žฌ๋Š” JIT ์ปดํŒŒ์ผ์˜ ๋„์ž…๊ณผ ํ•˜๋“œ์›จ์–ด์˜ ๋ฐœ์ „์œผ๋กœ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

JVM์€ ์ถ”์ƒ์ ์ธ ๋จธ์‹ ์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ‘๊ทผ์„ ๊ฐ€์ƒ ๋จธ์‹  ์ฐจ์›์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋Ÿฐํƒ€์ž„์— ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งค์šฐ ๊ทน๋‹จ์ ์ด๊ณ  ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๋ฉด ๊ทนํžˆ ์ผ๋ถ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๋ณด๋‹ค ๋” ์šฐ์›”ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ JIT ์ปดํŒŒ์ผ ์‹œ๊ฐ„, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์œ„ํ•œ ์‹œ๊ฐ„ ๋“ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ทผ๋ณธ์ ์ธ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.[5]

4.1. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (GC)[ํŽธ์ง‘]

JVM์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ• ๋‹น๋˜์—ˆ๋‹ค๊ฐ€ ๋” ์ด์ƒ ์“ฐ์ด์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•œ๋‹ค. Full GC(์ „์ฒด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰์„ ์ผ์‹œ ์ •์ง€(Stop-the-World) ์‹œ์ผœ๋†“๊ณ  ํ•  ์ˆ˜๋ฐ–์— ์—†๋Š”๋ฐ, ๋˜ ์ด๊ฒŒ Java ํ”„๋กœ๊ทธ๋žจ์ด ๊ทœ์น™์ ์ด์ง€๋„ ์•Š๊ณ  ์ด์œ ๋„ ์—†์ด ๋š๋š ๋Š๊ธด๋‹ค๋Š” ์•…๋ช…์„ ๋–จ์น˜๋Š”๋ฐ ๊ณตํ—Œํ–ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์˜ ์šด์˜ ์‹œ Full GC๋Š” ์„ฑ๋Šฅ์— ์ƒ๋‹นํžˆ ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ์ฃผ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ GC ํŠœ๋‹์ด ํ•„์ˆ˜๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ์ตœ์‹  ๋ฒ„์ „(11~12 ์ดํ›„)์˜ JVM์—๋Š” ํž™์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด(์ˆ˜๋ฐฑ MB ~ ์ˆ˜์‹ญ TB๊นŒ์ง€) ์ผ์‹œ์ •์ง€ ์‹œ๊ฐ„์ด 10ms ์ดํ•˜์ธ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค(ZGC, Shenandoah)์ด ํƒ‘์žฌ๋˜์–ด ์žˆ๋‹ค.

JVM ๋ชจ๋‹ˆํ„ฐ๋ง ํด๋ผ์ด์–ธํŠธ VisualVM[6]๊ณผ ๊ทธ ํ”Œ๋Ÿฌ๊ทธ์ธ Visual GC๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํŒ… ์ƒํ™ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. # VisualVM ๋””๋ ‰ํ† ๋ฆฌ์˜ etc ํด๋”์— ๊ฐ€๋ฉด visualvm.conf๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ, ์ด ํŒŒ์ผ์— ์ ํ˜€ ์žˆ๋Š” visualvm_jdkhome ํ•ญ๋ชฉ์˜ ์ฃผ์„(#)์„ ์ œ๊ฑฐํ•œ ํ›„ JDK ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ ์œผ๋ฉด ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฒ„์ „์˜ JDK๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

GC์˜ ์ƒ์„ธํ•œ ๋™์ž‘ ๊ณผ์ •์— ๋Œ€ํ•ด์„œ๋Š” ์ด ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•  ๊ฒƒ.

5. JVM ๊ธฐ๋ฐ˜ ์–ธ์–ด[ํŽธ์ง‘]

์ด๋ฆ„์— Java๊ฐ€ ๋“ค์–ด ์žˆ์ง€๋งŒ JVM์€ ์ž์‹ ์ด ๋ฌด์Šจ ์–ธ์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š”์ง€ ์ „ํ˜€ ๊ด€์‹ฌ์ด ์—†๋‹ค. ํ˜•์‹๋งŒ ์˜ฌ๋ฐ”๋กœ ์ง€์ผœ์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค๋ฉด Java๊ฐ€ ์•„๋‹ˆ๋ผ Java ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋„ ์–ผ๋งˆ๋“ ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

JVM์˜ ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ๊ณผ ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  Java ์ฝ”๋“œ์™€์˜ ์†์‰ฌ์šด ์ƒํ˜ธ์ž‘์šฉ ๋“ฑ์˜ ํŠน์ง•์œผ๋กœ ์ธํ•˜์—ฌ JVM์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Java ์ด์™ธ์˜ ์–ธ์–ด๋“ค๋„ ๋งŽ์ด ๊ฐœ๋ฐœ๋˜์–ด ์žˆ๋‹ค.

5.1. ๊ธฐ์กด ์–ธ์–ด์˜ JVM ๊ตฌํ˜„[ํŽธ์ง‘]

5.2. JVM ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด[ํŽธ์ง‘]

5.3. ๊ด€๋ จ ๋ฌธ์„œ[ํŽธ์ง‘]

6. ๊ด€๋ จ ๋ฌธ์„œ[ํŽธ์ง‘]

[1] Kotlin์ด๋‚˜ Scala, Groovy ๊ฐ™์€ ์–ธ์–ด๋“ค
[2] ๋‹ฌ๋น…์€ JIT๋ผ๊ณ ๋Š” ํ•ด๋„ ์ƒ์ˆ ํ•œ ๋ฌธ์ œ๋กœ ์ธํ•ด ์†๋„๊ฐ€ ๋А๋ฆด ์ˆ˜๋ฐ–์— ์—†๋‹ค.
[3] MS์˜ ์ด๋Ÿฌํ•œ ํ–‰๋ณด์—๋Š” ์˜๋„์ ์ธ ๋น„ํ˜ธํ™˜์„ฑ์„ ํ†ตํ•ด ๊ฒฐ๊ตญ Java์˜ ๋ฐœ๋ชฉ์„ ์žก๊ฒŒ ํ•˜๋ ค๋Š” ๊ผผ์ˆ˜๊ฐ€ ์žˆ์—ˆ๋‹ค๋Š” ์ง€์ ์ด ๋งŽ์•˜๋‹ค. ๋น„์Šทํ•œ ์˜ˆ๋กœ JavaScript๋ฅผ ๋งˆ๊ฐœ์กฐํ•œ JScript๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด ์—ญ์‹œ IE 9์—์„œ ECMA ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋„๋ก ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ๋ ˆ๊ฑฐ์‹œ ์ง€์›์œผ๋กœ๋งŒ ๋‚จ๊ฒŒ ๋˜์—ˆ๋‹ค.
[4] C, C++, Rust, Go ๋“ฑ
[5] ์ด ๋ถ€๋ถ„์ด ๋งค์šฐ ์ค‘์š”ํ•ด์„œ JVM์ด๋‚˜ .NET CLR ๋“ฑ ๊ฐ€์ƒ๋จธ์‹  ๊ธฐ๋ฐ˜์—์„œ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋Œ๋ฆด ๋•Œ๋Š” 1~5ํšŒ ์ •๋„ ์›œ์—…์„ ํ•œ ํ›„์— ์ธก์ •ํ•œ๋‹ค.
[6] ๋„ท๋นˆ์ฆˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋‹ค.