JavaRush /Java Blog /Random-KO /๋‚ด๋ถ€์ ์œผ๋กœ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰
ะŸะฐะฒะตะป ะ“ะพะปะพะฒ
๋ ˆ๋ฒจ 34
ะœะพัะบะฒะฐ

๋‚ด๋ถ€์ ์œผ๋กœ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์ฝ˜ํ…์ธ :

  1. ์†Œ๊ฐœ
  2. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ
  3. ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰์˜ ์˜ˆ
  4. ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
  5. JIT(Just-In-Time) ์ปดํŒŒ์ผ
  6. ๊ฒฐ๋ก 
๋‚ด๋ถ€์ ์œผ๋กœ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ - 1

1. ์†Œ๊ฐœ

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

2. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ

๋‚ด๋ถ€์ ์œผ๋กœ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ - 2
์ด๋ก ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ๋•Œ ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ์ƒ์„ฑ .javaํ•˜๊ณ  ๊ทธ ์•ˆ์— Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์„ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . ์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ์ด ์ค€๋น„๋˜๋ฉด ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ๊ณ„์—์„œ๋Š” ์ธ๊ฐ„๋งŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Java๋Š” ๋‹ค์ค‘ ํ”Œ๋žซํผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ด๋Š” Java๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ์ „์šฉ Java ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์ด ์„ค์น˜๋œ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์„ JVM(Java Virtual Machine)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์†Œ์Šค ์ฝ”๋“œ์—์„œ JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JVM์ด ์ดํ•ดํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ผ๊ณ  ํ•˜๋ฉฐ ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ดํ›„์— ์‹คํ–‰ํ•  ๋ช…๋ น ์„ธํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. javac์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด JDK(Java Development Kit)์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค . ์ปดํŒŒ์ผ๋Ÿฌ๋Š” .javaํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๊ณ , ์ถœ๋ ฅ์œผ๋กœ .class๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜๋ฉด ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ ์˜ˆ์‹œ

Calculator.java2๊ฐœ์˜ ์ˆซ์ž ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์ทจํ•˜๊ณ  ์ถ”๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์ธ์‡„ํ•˜๋Š” file ์— ํฌํ•จ๋œ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค .
class Calculator {
    public static void main(String[] args){
        int a = Integer.valueOf(args[0]);
        int b = Integer.valueOf(args[1]);

        System.out.println(a + b);
    }
}
์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด javac๋ช…๋ น์ค„์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
javac Calculator.java
์ปดํŒŒ์ผ ํ›„์—๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์„ ์ถœ๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค Calculator.class. ์ด๋Š” ๋ช…๋ น์ค„์—์„œ java ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํ“จํ„ฐ์— ์„ค์น˜๋œ Java ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
java Calculator 1 2
ํŒŒ์ผ ์ด๋ฆ„ ๋’ค์— 2๊ฐœ์˜ ๋ช…๋ น์ค„ ์ธ์ˆ˜(์ˆซ์ž 1๊ณผ 2)๊ฐ€ ์ง€์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ ํ›„ ์ˆซ์ž 3์ด ๋ช…๋ น์ค„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ๋Š” ์ž์ฒด์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํด๋ž˜์Šค๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. . ํ•˜์ง€๋งŒ ํด๋ž˜์Šค๊ฐ€ ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋‹ค์Œ ์ƒํ™ฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  src/ru/javarush๊ฑฐ๊ธฐ์— ํด๋ž˜์Šค๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(ํŒŒ์ผ ์‹œ์ž‘ ๋ถ€๋ถ„์— ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค).
package ru.javarush;

class Calculator {
    public static void main(String[] args){
        int a = Integer.valueOf(args[0]);
        int b = Integer.valueOf(args[1]);

        System.out.println(a + b);
    }
}
๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋ฅผ ์ปดํŒŒ์ผํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
javac -d bin src/ru/javarush/Calculator.java
-d bin์ด ์˜ˆ์—์„œ๋Š” ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์„ bin๋””๋ ‰ํ† ๋ฆฌ์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ์ถ”๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ src๋””๋ ‰ํ† ๋ฆฌ๋Š” bin๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ๊ณผ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํŒŒ์ผ์˜ ํ˜ผ๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค classpath. Classpath๊ฐ€์ƒ ๋จธ์‹ ์ด ํŒจํ‚ค์ง€์™€ ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค๋ฅผ ์ฐพ๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์–ด๋–ค ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ Java ํŒจํ‚ค์ง€ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ๋ฃจํŠธ์ธ์ง€ ๊ฐ€์ƒ ๋จธ์‹ ์— ์•Œ๋ ค์ค๋‹ˆ๋‹ค. Classpathํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•  ๋•Œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค -classpath. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
java -classpath ./bin ru.javarush.Calculator 1 2
์ด ์˜ˆ์—์„œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์„ ํฌํ•จํ•˜์—ฌ ํด๋ž˜์Šค์˜ ์ „์ฒด ์ด๋ฆ„์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ํŒŒ์ผ ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
โ”œโ”€โ”€ src
โ”‚     โ””โ”€โ”€ ru
โ”‚          โ””โ”€โ”€ javarush
โ”‚                  โ””โ”€โ”€ Calculator.java
โ””โ”€โ”€ bin
      โ””โ”€โ”€ ru
           โ””โ”€โ”€ javarush
                   โ””โ”€โ”€ Calculator.class

4. ๊ฐ€์ƒ ๋จธ์‹ ์— ์˜ํ•œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์„œ๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ€์ƒ ๋จธ์‹ ์— ์˜ํ•ด ์‹คํ–‰๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋จผ์ € ์ปดํŒŒ์ผ๊ณผ ์ฝ”๋“œ ํ•ด์„์˜ ๊ฐœ๋…์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ์€ ๊ณ ๊ธ‰ ์†Œ์Šค ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ธฐ๊ณ„ ์ฝ”๋“œ์™€ ์œ ์‚ฌํ•œ ์ €๊ธ‰ ์–ธ์–ด๋กœ ๋œ ๋™๋“ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด์„์€ ์—ฐ์‚ฐ์ž๋ณ„(๋ช…๋ น๋ณ„, ์ค„๋ณ„) ๋ถ„์„, ์ฒ˜๋ฆฌ ๋ฐ ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์š”์ฒญ์˜ ์ฆ‰๊ฐ์ ์ธ ์‹คํ–‰์ž…๋‹ˆ๋‹ค(ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ฒˆ์—ญํ•˜๋Š” ์ปดํŒŒ์ผ๊ณผ ๋ฐ˜๋Œ€). ์ž๋ฐ” ์–ธ์–ด์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ( javac)์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์ƒ๋จธ์‹ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ€์ƒ ๋จธ์‹ ์€ ์ด๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„ ์ฝ”๋“œ๋กœ ํ•œ ์ค„์”ฉ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์ˆœ์ˆ˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ•ด์„์€ ๋‹ค์†Œ ๊ธด ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ ๊ฒฝ์Ÿ์‚ฌ์— ๋น„ํ•ด Java๋ฅผ ๋Š๋ฆฌ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์ƒ ๋จธ์‹ ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ•ด์„ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ JITC(Just-in-time ์ปดํŒŒ์ผ)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

5. JIT(Just-In-Time) ์ปดํŒŒ์ผ

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ Just-In-Time ์ปดํŒŒ์ผ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์— ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ํ•œ ๋ฒˆ ์ปดํŒŒ์ผํ•˜์—ฌ ํ–ฅํ›„ ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ ํ›„, ํ”„๋กœ๊ทธ๋žจ์˜ ์ด ๋ถ€๋ถ„์„ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ƒ ๋จธ์‹ ์€ ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ๋Š˜๋ฆฌ๊ณ (์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!) ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ์ปดํŒŒ์ผ์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์„ ๋Š˜๋ ค ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. JIT ์ปดํŒŒ์ผ์€ ๋‹ค์†Œ ๋ณต์žกํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ฏ€๋กœ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ JIT ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ๋Š” 4๊ฐ€์ง€ ๋ ˆ๋ฒจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์ˆ˜์ค€์ด ๋†’์„์ˆ˜๋ก ๋” ๋ณต์žกํ•ด ์ง€์ง€๋งŒ ๋™์‹œ์— ํ•ด๋‹น ์„น์…˜์˜ ์‹คํ–‰์€ ์ˆ˜์ค€์ด ๋‚ฎ์€ ์„น์…˜๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. JIT - ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•ด๋‹น ์กฐ๊ฐ์ด ์‹คํ–‰๋˜๋Š” ๋นˆ๋„์— ๋”ฐ๋ผ ๊ฐ ํ”„๋กœ๊ทธ๋žจ ์กฐ๊ฐ์— ์„ค์ •ํ•  ์ปดํŒŒ์ผ ์ˆ˜์ค€์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ JVM์€ 2๊ฐœ์˜ JIT ์ปดํŒŒ์ผ๋Ÿฌ(C1 ๋ฐ C2)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. C1 ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํด๋ผ์ด์–ธํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๊ณ ๋„ ํ•˜๋ฉฐ 3๋ ˆ๋ฒจ๊นŒ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C2 ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋„ค ๋ฒˆ์งธ๋กœ ๊ฐ€์žฅ ๋ณต์žกํ•˜๊ณ  ๋น ๋ฅธ ์ปดํŒŒ์ผ ์ˆ˜์ค€์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๋ถ€์ ์œผ๋กœ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ - 3
์œ„์—์„œ๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•œ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ C1 ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ˆ˜์ต์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์‹œ์ž‘๋˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธก์˜ ์ˆ˜๋ช…์ด ๊ธด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์•ž์œผ๋กœ๋Š” ์‹ ์†ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” C2 ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. -clientJVM์˜ x32 ๋ฒ„์ „์—์„œ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฐ ํ”Œ๋ž˜๊ทธ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋ชจ๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค -server. ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋˜๋ฉด -clientJVM์€ ๋ณต์žกํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋นจ๋ผ์ง€๊ณ  ์†Œ๋น„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด -server๋ณต์žกํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ตœ์ ํ™”๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์•ž์œผ๋กœ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. x64 ๋ฒ„์ „์˜ JVM์—์„œ๋Š” ํ”Œ๋ž˜๊ทธ -client๊ฐ€ ๋ฌด์‹œ๋˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๊ตฌ์„ฑ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

6. ๊ฒฐ๋ก 

์ด๊ฒƒ์œผ๋กœ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๋ฅผ ๋งˆ์นฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์š”์ :
  1. javac ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ Java ๊ฐ€์ƒ ๋จธ์‹ ์ด ์„ค์น˜๋œ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ปดํŒŒ์ผ ํ›„ JVM์€ ๊ฒฐ๊ณผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.
  3. Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด JVM์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์„น์…˜์„ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” Just-In-Time ์ปดํŒŒ์ผ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ธฐ์‚ฌ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋น„ํŒ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION