LANGUAGE/JAVA

[JAVA] 1์ฃผ์ฐจ - JVM์€ ๋ฌด์—‡์ด๋ฉฐ ์ž๋ฐ” ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€

GaGah 2021. 10. 10. 17:57

์ถœ์ฒ˜ : https://nakyungim.tistory.com/entry/JAVA-Java-%EC%A0%9C%EA%B1%B0-%ED%9B%84-%EC%9E%AC%EC%84%A4%EC%B9%98

 

๐Ÿ‘ป ์ž๋ฐ”๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

์ž๋ฐ”๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ C/C++๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ C/C++์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ณต์žกํ•˜๊ณ  ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ–ˆ๋‹ค.

์ดˆ๊ธฐ์— ์ž๋ฐ”๊ฐ€ ์ง€ํ–ฅํ•œ ๋ฐ”๋กœ๋Š” multiple host architecture ์™€ secure์œผ๋กœ ํ•œ ๋ฒˆ ์“ฐ๊ณ  ์–ด๋Š ๊ณณ์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ–ˆ๋‹ค. (Write Once Run Anywhere)

์ž๋ฐ”๋กœ ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋žจ์€ CPU๋‚˜ ์šด์˜ ์ฒด์ œ์˜ ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด JVM์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ ์–ด๋””์„œ๋‚˜ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์„ฑ๊ณผ ๋งž์•„๋–จ์–ด์ ธ ํญ๋ฐœ์ ์ธ ์ธ๊ธฐ๋ฅผ ๋Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๐Ÿ™„ JVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • ์ •์˜ : ์ž๋ฐ” ๊ฐ€์ƒ ๊ธฐ๊ณ„(JVM : Java Virtual Machine)๋กœ์„œ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด
  • ์„ค๊ณ„์ž : ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง(James Gosling)
  • ๊ตฌ์„ฑ : Class Loader, Excution Engine, Garbage Collector, Runtime Data Area
  • ์žฅ์  : CPU๋‚˜ ์šด์˜์ฒด์ œ ์ข…๋ฅ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(=ํ”Œ๋žซํผ ๋…๋ฆฝ์ )
  • ๋‹จ์  : ๋‹ค๋ฅธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์˜ ์–ธ์–ด๋ณด๋‹ค๋Š” ์ƒ๋‹นํžˆ ๋น ๋ฅธ ์ˆ˜ํ–‰๋Šฅ๋ ฅ์„ ๋ณด์ด์ง€๋งŒ, ์ผ๊ด„ ์ปดํŒŒ์ผ ๋ฐฉ์‹ ์–ธ์–ด๋ณด๋‹ค๋Š” ์ˆ˜ํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

 

++ ์ถ”๊ฐ€ ๋‚ด์šฉ

JVM์€ JAVA์–ธ์–ด์˜ ์–ด๋–ค ๊ฒƒ๋„ ์•Œ์ง€๋ชปํ•˜๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ์ธ .class ํ˜•์‹๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ JavaํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด, ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋ฐ” ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ผ๋Š” ํŠน์ˆ˜ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ(.class)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. (.class ํŒŒ์ผ์—๋Š” JVM ๋ช…๋ น์–ด ๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ์™€ ๊ธฐํ˜ธ ํ‘œ ๋ฐ ๊ธฐํƒ€ ๋ณด์กฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.)

 

 

 

๐Ÿ“Œ JVM์˜ ํŠน์ง•

  1. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹ 
    • ๋Œ€๋‹ค์ˆ˜์˜ ๋ช…๋ น์–ด๊ฐ€ ์Šคํƒ ์„ ๋‘์—์„œ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ํƒํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์Šคํƒ์— ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
  2. ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค
    • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(primitive data type)์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํƒ€์ž…(ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ)์„ ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ†ตํ•ด ์ฐธ์กฐํ•œ๋‹ค. 
    • ๊ธฐ๋ณธ์ž๋ฃŒํ˜• : boolean, char, byte, short, int, long, float, double
  3. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
    • ์‚ฌ์šฉ์ž ์ฝ”๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•ด ์ž๋™์œผ๋กœ ํŒŒ๊ดด ๋œ๋‹ค.
  4.  ๋ชจ๋“  ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ
    • C/C++๋“ฑ์˜ ์–ธ์–ด๋Š” ํ”Œ๋žซํผ์— ๋”ฐ๋ผ intํ˜•์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•œ๋‹ค.
    • JVM์€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ํ˜ธํ™˜์„œ์„ ์œ ์ง€ํ•˜๊ณ  ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  5.  ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์˜ค๋”
    • ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ์€ ๋„คํŠธ์›Œํฌ ์ „์†ก ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ดํŠธ ์˜ค๋”์ธ ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์˜ค๋”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๐Ÿ“Œ JVM(Java Virtural Machine)์˜ ๊ตฌ์„ฑ์š”์†Œ

 

  1. ํด๋ž˜์Šค ๋กœ๋” (Class Loader)
    • ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ .class ํŒŒ์ผ์„ Runtime Data Area๋กœ ์ ์žฌํ•˜๋Š” ์—ญํ• (=๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ์—ญํ• )์„ ํ•œ๋‹ค.
    • loading, linking, initialization ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
      • loading : .classํŒŒ์ผ์„ ์ฝ์–ด์„œ Method Area์— ์ €์žฅํ•œ๋‹ค. (ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค/Enum๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋ณ€์ˆ˜/๋ฉ”์†Œ๋“œ/ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.)
      • linking : classํŒŒ์ผ์˜ ์ •ํ™•์„ฑ์„ ๊ฒ€์ฆ(์‹คํŒจํ•˜๋ฉด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ)ํ•˜๊ณ , ํด๋ž˜์Šค ๋ณ€์ˆ˜์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
      • initialization : static๋ณ€์ˆ˜ ํ• ๋‹น
  2. Runtime Data Area
    • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์ •์˜ํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์˜์—ญ์œผ๋กœ๋Š” Method, Heap, Stack, PC register, Native Method Stack์ด ์กด์žฌํ•œ๋‹ค.
      • Method Area : ๊ณต์œ  ๋ฆฌ์†Œ์Šค๋กœ ์ •์  ๋ณ€์ˆ˜, ํด๋ž˜์Šค ์ด๋ฆ„, ๋ฉ”์†Œ๋“œ ๋ฐ ๋ณ€์ˆ˜ ์ •๋ณด ์ €์žฅ
      • Heap Area : ๊ณต์œ  ๋ฆฌ์†Œ์Šค๋กœ ๋ชจ๋“  ๊ฐœ์ฒด์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ
      • Stack Area : ์Šค๋ ˆ๋“œ๋ณ„๋กœ ์Šคํƒ์ด ์กด์žฌํ•˜๋ฉฐ, ๋กœ์ปฌ ๋ณ€์ˆ˜ ์ €์žฅ
      • PC register : ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ๋ช…๋ น ์ฃผ์†Œ
  3. Execution Engine
    • .class๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ์ค„์”ฉ ์ฝ์œผ๋ฉฐ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์‹คํ–‰ํ•œ๋‹ค.
      • Interprter ๋ฐฉ์‹ : ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์ฝ๊ณ  ํ•ด์„ํ•œ๋‹ค.
      • JIT ๋ฐฉ์‹ : 
  4. ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ (Garbage Collector)
    • Heap๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ๊ฐ์ฒด๋“ค ์ค‘ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

 

๐Ÿ“Œ ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•

javac "ํด๋ž˜์Šค ์ด๋ฆ„.java"
์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„.class(๋ฐ”์ดํŠธํ˜•ํƒœ)๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

์ž๋ฐ”์˜ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• 

  • ์ž๋ฐ” ์–ธ์–ด๋ฅผ JVM์ด ์ดํ•ดํ•˜๋Š” ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•œ๋‹ค. 

 

์ž๋ฐ”์˜ ์ปดํŒŒ์ผ ๊ณผ์ •

  1. ๊ฐœ๋ฐœ์ž๋“ค์ด ide๋‚˜ terminal ํ™˜๊ฒฝ์—์„œ .java ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
  2. build๋ผ๋Š” ์ž‘์—…์„ ํ†ตํ•ด .class ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

javac ์˜ต์…˜

 

 

๐Ÿ“Œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

java ํด๋ž˜์Šค์ด๋ฆ„.class
classLoader๊ฐ€ class๋ฅผ Method Area๋กœ ์˜ฌ๋ฆฌ๊ณ  byte์ฝ”๋“œ๊ฐ€ ์ •ํ™•ํ•œ์ง€ ํ™•์ธํ•œ ํ›„ Execution Engine์—์„œ ์‹คํ–‰๋œ๋‹ค.

 

 

๐Ÿ“Œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ธ๊ฐ€

์•ž์„œ ๋งํ–ˆ๋“ฏ์ด JVM์€ ํ”Œ๋žซํผ์— ์ข…์†์ ์ด์ง€ ์•Š๊ณ , ์–ด๋Š ๊ณณ์—์„œ๋‚˜ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
JVM์ด ํ”Œ๋žซํผ ์ข…์†์ ์ด์ง€ ์•Š๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž ์–ธ์–ด์ธ ์ž๋ฐ”์™€ ๊ธฐ๊ณ„์–ด ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ์–ธ์–ด์ด๋ฉฐ, ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ด๋‹ค.

 

 

 

๐Ÿ“Œ JIT ์ปดํŒŒ์ผ๋Ÿฌ? ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?

JIT(Just In Time) ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

ํด๋ž˜์ŠคํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ Interpreter๋ฐฉ์‹์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ๋งค๋ฒˆ ํ•ด์„์ด ํ•„์š”ํ•˜์—ฌ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด/์ปดํŒŒ์ผ๋Ÿฌ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด JIT์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‚˜์™”๋‹ค.

 

JIT(Just In Time) ๋ž€?

๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด(.class ํŒŒ์ผ)๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๋ณผ ๋•Œ๋งˆ๋‹ค JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ง์ ‘ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์žฌํ•ด์„์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.

 

cf) ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๋ž€?

 

๐Ÿ“Œ JDK์™€ JRE์˜ ์ฐจ์ด

์ถœ์ฒ˜ : https://sangwoo0727.github.io/java/JAVA-2_jdk/

 

JDK(Java Developement kit)

์ž๋ฐ” ํ™˜๊ฒฝ์—์„œ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํˆด(JRE, ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ)๋“ค์„ ๋ชจ์•„๋‘” ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€

 

JRE(Java Runtime Environment)

JRE๋Š” ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ SW๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ” ํŒŒ์ผ์„ JVM์œผ๋กœ ๋กœ๋”ฉ์‹œํ‚ค๋Š” ์—ญํ• 
  • JVM์€ ์ž๋ฐ”ํŒŒ์ผ์„ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • jre๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ™˜๊ฒฝ = javaํŒŒ์ผ์„ ์‹คํ–‰๋งŒ ์‹œํ‚ฌ ๊ฒƒ์ด๋ผ๋ฉด jre๋งŒ ์žˆ์–ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • runtine environment์€ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋˜๋Š” ์ผ์ข…์˜ ์†Œํ”„ํŠธ์›จ์–ด์ž„

 

์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ
JDK๋ฅผ ํ•„์ˆ˜๋กœ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

 

 

์ถœ์ฒ˜

d2.naver.com/helloworld/1230

- oracle JVM : docs.oracle.com/javase/specs/jvms/se7/html/jvms-1.html#jvms-1.1

- How JVM work : https://www.geeksforgeeks.org/jvm-works-jvm-architecture/

- JDK ์™€ JRE์˜ ์ฐจ์ด :  https://www.geeksforgeeks.org/differences-jdk-jre-jvm/

- ์œ„ํ‚ค๋ฐฑ๊ณผ ์ž๋ฐ” : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4) 

- ์œ„ํ‚ค๋ฐฑ๊ณผ JVM : ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0

LIST