๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BackEnd๐ŸŒฑ/Java

[Java] JIT ์ปดํŒŒ์ผ๋Ÿฌ(Just-In-Time)

by ์•ˆ์ฃผํ˜• 2022. 3. 8.

JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

JIT๋Š” Just-In-Time์˜ ์•ฝ์–ด๋กœ '์ฆ‰์‹œ'๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ž๋ฐ”์—์„œ ์ปดํŒŒ์ผ๊ณผ ๋Ÿฐํƒ€์ž„์ด ์–ด๋–ค ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  1. Java ์ฝ”๋“œ๋Š” JavaCompiler๋ฅผ ํ†ตํ•ด ByteCode๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  2. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ†ตํ•ด ํ•œ ์ค„ ํ•œ ์ค„ ํ•ด๋‹น OS์—์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด(native code)๋กœ ๋ฒˆ์—ญ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ Java๋Š” ์ปดํŒŒ์ผ๊ณผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ๋ณ‘ํ–‰ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter) ๋ฐฉ์‹๊ณผ ์ปดํŒŒ์ผ(Compile) ๋ฐฉ์‹์ด ํ˜ผํ•ฉ๋œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

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

์†Œ์Šค์ฝ”๋“œ~๋ฐ”์ดํŠธ์ฝ”๋“œ

์œ„ ์ด๋ฏธ์ง€๋Š” ํ•ด๋‹น ์˜์ƒ์˜ ์บก์ณ๋ณธ์ž…๋‹ˆ๋‹ค. ์ž˜ ๋ณด์‹œ๋ฉด 4, 5, 6๋ฒˆ์˜ Display()๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์†Œ์Šค์ฝ”๋“œ์— ์ค‘๋ณต๋˜์–ด ์ ํ˜€์žˆ๊ณ , ์ด๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ByteCode๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ธฐ ์œ„ํ•ด ByteCode๋ฅผ ์‚ดํ•„ ๋•Œ ์›๋ž˜๋Š” ์ค‘๋ณต๋œ 3๊ฐœ์˜ Display() ๋ฉ”์„œ๋“œ๋ฅผ ์ „๋ถ€ ํ•˜๋‚˜์”ฉ ๋ฒˆ์—ญํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ๋จผ์ € JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ ์ „์ฒด๋ฅผ ํ™•์ธํ•œ ํ›„ ์ค‘๋ณต๋œ ๋ถ€๋ถ„์„ ๋ฏธ๋ฆฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ์‹œ์ผœ์„œ ์ €์žฅํ•ด๋†“์Šต๋‹ˆ๋‹ค. ์ดํ›„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋ฒˆ์—ญํ•˜๋‹ค๊ฐ€ ์ค‘๋ณต๋œ ๋ถ€๋ถ„์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ์ด๋ฏธ ๋ณ€ํ™˜๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ›จ์”ฌ ์‹œ๊ฐ„์†๋„ ๋ฉด์—์„œ ๊ฐœ์„ ๋œ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

JIT Compiler๋ฅผ ์ด์šฉํ•œ ์ž๋ฐ” ์‹คํ–‰ ๊ณผ์ •

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

๋Œ“๊ธ€