Study: Software(SW)/SW: Language

[JAVA] JVM vs JDK vs JRE? (java์™€ javac์˜ ๋ฒ„์ „ ๋ฐ ์„ค์น˜๊ฒฝ๋กœ ์•Œ์•„๋ณด๊ธฐ)

DrawingProcess 2023. 1. 19. 13:23
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 'JVM, JDK, JRE ๋Š”? (java์™€ javac ๊นŒ์ง€ ์•Œ์•„๋ณด๊ธฐ)'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
JAVA๋ฅผ ์ฒ˜์Œ ๊ณต๋ถ€ํ• ๋•Œ ํ–‡๊ฐˆ๋ฆฌ๋Š” ์ •๋ณด์ธ JVM, JDK, JRE์˜ ์ฐจ์ด์™€ java์™€ javac์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์˜€์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. JVM vs JRE vs JDK

1.1 JVM(Java Virtual Machine)

JVM์€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง€๋Š” ์ž๋ฐ” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ(.class)์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค์˜ JVM๊ณผ ์œˆ๋„์šฐ์˜ JVM์€ ๋‹ค๋ฅธ๋ฐ, ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋Š” ์–ด๋–ค JVM์—์„œ๋„ ๋™์ž‘ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ JVM์˜ ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ '์ฝ๊ณ ' '๊ฒ€์ฆ'ํ•˜๊ณ  '์‹คํ–‰'ํ•˜๋ฉฐ,
  • ์‹คํ–‰ํ™˜๊ฒฝ(Runtime Environment)์˜ ๊ทœ๊ฒฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐํƒ€ํŒŒ์ผ). 

1.2 JRE(Java Runtime Enviroment)

JRE๋Š” JVM์ด ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ๋™์ž‘์‹œํ‚ฌ ๋•Œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ๋“ค๊ณผ ๊ธฐํƒ€ ํŒŒ์ผ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JRE๋Š” JVM์˜ ์‹คํ–‰ํ™˜๊ฒฝ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๊ธฐ์—, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„  JRE๋ฅผ ๋ฐ˜๋“œ์‹œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ๋Š” ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  JDK๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

1.3 JDK(Java Development kit)

JDK๋Š” java์™€ javac์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋„๊ตฌ์™€ ์ปดํŒŒ์ผ๋Ÿฌ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. JRE์„ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ JDK๋ฅผ ์„ค์น˜ํ•˜๋ฉด JRE๋„ ๊ฐ™์ด ์„ค์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค(์ฆ‰, JDK = JRE + a ).

2.  java vs javac

2.1 ๊ฐœ๋…

  • javac: *.java ํŒŒ์ผ์„ *.class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ
  • java: javac๋กœ ์ปดํŒŒ์ผ ๋œ class ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

2.2 ๋ฒ„์ „ ํ™•์ธ

java, javac ๋ฒ„์ „ ํ™•์ธํ•˜๊ธฐ

javac -version
javac 1.8.0_302โ€‹
java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)โ€‹

2.3 ์œ„์น˜ ํ™•์ธ

java, javac ์œ„์น˜ ํ™•์ธํ•˜๊ธฐ

which javac
/usr/bin/javacโ€‹
which java
/usr/bin/javaโ€‹

java์™€ javac์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์›๋ณธ ์ฐพ๊ธฐ

readlink -f /usr/bin/javac
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/bin/javacโ€‹
readlink -f /usr/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/javaโ€‹

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•