Execution Engine

Execution Engine์€ Java Virtual Machine(JVM) ๋‚ด์—์„œ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋œ ํ›„ ์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ•ต์‹ฌ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ClassLoader๋ฅผ ํ†ตํ•ด JVM ๋‚ด๋กœ ๋ฐฐ์น˜๋œ ํด๋ž˜์Šค๋Š” Execution Engine์„ ํ†ตํ•ด Bytecode๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ JVM์€ ์ง€์ •๋œ ๋ช…๋ น์–ด ์ง‘ํ•ฉ(Instruction Set)์— ๋”ฐ๋ผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…๋ น์–ด๋“ค์€ Bytecode์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‹ค์ œ๋กœ ํด๋ž˜์Šค์˜ Bytecode๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Execution Engine์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค.

Java ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ๊ณผ์ •

Java ํ”„๋กœ๊ทธ๋žจ์ด JVM์—์„œ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

  1. ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์ปดํŒŒ์ผ: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ Java ์†Œ์Šค ์ฝ”๋“œ๋Š” .java ํ™•์žฅ์ž๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ JDK์— ํฌํ•จ๋œ javac ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ๋˜์–ด .class ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด .class ํŒŒ์ผ์€ JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Bytecode๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, Bytecode๋Š” JVM์˜ ๋ช…๋ น์–ด ์ง‘ํ•ฉ์œผ๋กœ ๋ณ€ํ™˜๋œ ์†Œ์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

  2. ํด๋ž˜์Šค ๋กœ๋”ฉ: ์ปดํŒŒ์ผ๋œ .class ํŒŒ์ผ์€ JVM์˜ ClassLoader์— ์˜ํ•ด JVM ๋‚ด๋กœ ๋กœ๋“œ๋˜๊ณ , ์ด์–ด์„œ ๋งํฌ(Link) ์ž‘์—…์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๋ฉด ํด๋ž˜์Šค๋Š” Runtime Data Areas์˜ Method Area์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. Method Area๋Š” JVM ๋‚ด์—์„œ ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋ฉ”์„œ๋“œ ๋ฐ์ดํ„ฐ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค.

  3. Execution Engine์— ์˜ํ•œ ์‹คํ–‰: ๋กœ๋“œ๋œ ํด๋ž˜์Šค์˜ Bytecode๋Š” Execution Engine์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Execution Engine์€ Bytecode๋ฅผ ์ฝ๊ณ , ์ด๋ฅผ JVM ๋ช…๋ น์–ด๋กœ ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ JVM ๋ช…๋ น์–ด๋Š” Instruction Set์œผ๋กœ ์ •์˜๋˜๋ฉฐ, ๊ฐ๊ฐ์˜ Instruction์€ Opcode์™€ Operand๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Opcode๋Š” ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์˜๋ฏธํ•˜๊ณ , Operand๋Š” ์ž‘์—…์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

Bytecode์™€ Instruction์˜ ๊ตฌ์กฐ

Bytecode๋Š” Java ์†Œ์Šค ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ช…๋ น์–ด๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. Bytecode๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ ๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  1. ๋ฉ”์„œ๋“œ ์‹œ์ž‘ ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ์˜ Offset: Bytecode์—์„œ ํŠน์ • ๋ช…๋ น์–ด๊ฐ€ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์œ„์น˜ํ•˜๋Š” ์ง€์ ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋Š” ๋ช…๋ น์–ด ๊ฐ„์˜ ์ œ์–ด ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  2. Opcode์™€ Operand: Opcode๋Š” ์ˆ˜ํ–‰ํ•  ์ž‘์—…์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, Operand๋Š” ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, iconst_0์€ ์ƒ์ˆ˜ 0์„ ์Šคํƒ์— ํ‘ธ์‹œํ•˜๋Š” ๋ช…๋ น์–ด์ด๊ณ , istore_1์€ ์Šคํƒ์˜ ๊ฐ’์„ ๋กœ์ปฌ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

  3. ์ฃผ์„: Bytecode๋Š” ์ฃผ์„์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” Bytecode๋ฅผ ํ•ด์„ํ•˜๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์ง€๋งŒ ์‹ค์ œ ์‹คํ–‰์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Execution Engine์˜ ๋™์ž‘ ๋ฐฉ์‹

Execution Engine์€ JVM ๋‚ด์—์„œ Bytecode๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹: Execution Engine์ด Bytecode๋ฅผ ํ•œ ์ค„์”ฉ ์ฝ๊ณ , ์ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ Bytecode๋ฅผ ํ•ด์„ํ•˜๋Š” ์‹œ๊ฐ„์ด ์งง๋‹ค๋Š” ์ ์ด์ง€๋งŒ, ์‹คํ–‰ ์†๋„๋Š” ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ฃจํ”„์™€ ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹: JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. JVM์€ ์ฒ˜์Œ์— Bytecode๋ฅผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€, ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ด ๊ฐ์ง€๋˜๋ฉด JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋œ ํ›„, JVM์€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์—ฌ ์†๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ด์Šˆ์™€ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

Java์˜ Execution Engine์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค:

  1. On-Stack Replacement (OSR): OSR์€ JVM์ด ๋ฃจํ”„ ๋‚ด์—์„œ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ๊ฐ์ง€ํ•˜๋ฉด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ์‹คํ–‰ ์ค‘์ด๋˜ ์ฝ”๋“œ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฃจํ”„์™€ ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ ๋ธ”๋ก์—์„œ ํฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  2. Loop Unrolling: ์ด ๊ธฐ๋ฒ•์€ ๋ฃจํ”„์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฃจํ”„ ๋ณธ๋ฌธ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณต์‚ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฃจํ”„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ๋ช…๋ น์–ด ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. Dead Code Elimination: ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ„์‚ฐ๋œ ๊ฐ’์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ณ„์‚ฐ ์ฝ”๋“œ๋Š” ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

  4. Code Hoisting: ์ด ๊ธฐ๋ฒ•์€ ๋ฃจํ”„ ๋‚ด์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š” ๊ฐ’์„ ๋ฃจํ”„ ์™ธ๋ถ€๋กœ ์ด๋™์‹œ์ผœ, ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ค„์ด๋Š” ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฃจํ”„ ๋‚ด์—์„œ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Execution Engine์˜ ์„ฑ๋Šฅ ์ด์Šˆ

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

JVM์˜ ๊ธฐ๋™ ์‹œ๊ฐ„๊ณผ AOT ์ปดํŒŒ์ผ๋Ÿฌ

JVM์€ ๊ธฐ๋™ ์‹œ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งŽ์€ Bytecode๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋™ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Java 6์—์„œ Ahead-Of-Time(AOT) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. AOT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” JVM์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— Bytecode๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ Shared Cache์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด Shared Cache๋Š” ์—ฌ๋Ÿฌ JVM ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, JVM ๊ธฐ๋™ ์‹œ ์ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋™ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ์ดˆ๊ธฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Hotspot ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋™์ž‘ ๋ฐฉ์‹

Hotspot JVM์€ ๋‘ ๊ฐ€์ง€ ์ƒ์ดํ•œ VM์ธ Client VM๊ณผ Server VM์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. Client VM์€ ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด ์ตœ์ ํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” C1 ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, Server VM์€ ๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ์ตœ์ ํ™”๋ฅผ ์ œ๊ณตํ•˜๋Š” C2 ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. C1 ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฃผ๋กœ ์ •์ ์ธ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, C2 ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ „๋ฐ˜์ ์ธ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

Hotspot JVM์€ ์ด ๋‘ ๊ฐ€์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ตœ์ ํ™” ์ „๋žต์„ ์ ์šฉํ•˜์—ฌ, ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Execution Engine์€ Java์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ, ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ํ†ตํ•ด Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ฉฐ, Java์˜ "Write Once, Run Anywhere" ์ฒ ํ•™์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋†’์€ ์‹คํ–‰ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Last updated