๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

JVM ๋‚ด๋ถ€๋กœ ๋ณธ๋ฌธ

JVM์ด๋ž€?

์ž๋ฐ”๋ฅผ ๊ฐ€์ง€๊ณ  ์ฝ”๋”ฉ์„ ํ•˜๋Š” ์‚ฌ๋žŒ์€ ํ•œ๋ฒˆ ์ฏค JVM ์ด๋ž€ ๋‹จ์–ด๋ฅผ ๋“ค์–ด์™”์„ ๊ฒƒ์ด๋‹ค.

์ด JVM์€ ์ปดํ“จํ„ฐ์™€์˜ ์†Œํ†ต์„ ๋„์™€์ฃผ๋Š”๋ฐ, ์–ด๋–ค ์‹์œผ๋กœ ์†Œํ†ต์„ ๋„์™€์ฃผ๋Š” ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ดํŽด๋ณด์ž

 

๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋”ฉ์„ ํ•˜๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์ปดํŒŒ์ผํ•˜๋ฉด .class ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

 

ํ˜„์žฌ ์ด ํด๋ž˜์Šค ํŒŒ์ผ์€ ๊ธฐ๊ณ„์–ด๊ฐ€ ์•„๋‹Œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋˜์–ด์žˆ๋‹ค.

 

๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ์ด๋‹ค.

 

์–ธ์ œ ์–ด๋””์„œ๋“  ์šด์˜์ฒด์ œ์— ๊ด€๊ณ„์—†์ด JVM ์œ„์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š”

 

System.out.println("Hello World");

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

// class version 61.0 (61)
// access flags 0x21
public class Main {

  // compiled from: Main.java

  // access flags 0x1
  public <init>()V
   L0
    LINENUMBER 8 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V
    RETURN
   L1
    LOCALVARIABLE this LMain; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1

  // access flags 0x9
  public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 10 L0
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    LDC "hello world"
    INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
   L1
    LINENUMBER 11 L1
    RETURN
   L2
    LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
    MAXSTACK = 2
    MAXLOCALS = 1
}

 

์ด๋ ‡๊ฒŒ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ ๋œ ํด๋ž˜์Šค ํŒŒ์ผ์„ JVM์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

 

JVM์€ ์ด ํ˜•์‹์˜ ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ์„ ํ•ด์„œ ์ œ๊ณตํ•œ๋‹ค.

์ฆ‰ JVM์€ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ปดํ“จํ„ฐ ์‚ฌ์ด์— ํ†ต์—ญ๊ฐ€ ๊ฐ™์€ ์—ญํ• ์„ ํ•ด์ค€๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

๊ธฐ์กด c,c++ ์ปดํŒŒ์ผ๋Ÿฌ์™€๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

๊ทผ๋ฐ ํ•˜๋‚˜ ์˜๋ฌธ์ ์ด ์ƒ๊ฒผ๋‹ค.

๋‹ค๋ฅธ ์–ธ์–ด๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์žฅ์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๋Š”๋ฐ ์™œ ์ž๋ฐ”๋งŒ JVM์ด๋ž€ ๊ฒƒ์„ ์‚ฌ์šฉํ• ๊นŒ?

 

printf("Hello World");

 

๋ถ„๋ช… c์–ธ์–ด๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋”ฉ์„ ํ•˜๋Š”๋ฐ c์–ธ์–ด๋„ JVM ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ• ๊นŒ?

 

๊ฒฐ๋ก ์€ “์•„๋‹ˆ๋‹ค”

์ด๋Š” ์–ธ์–ด๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ปดํŒŒ์ผ ๋ฐฉ์‹์˜ ์ฐจ์ด ๋•Œ๋ฌธ์ด๋‹ค.

 

 

c๋‚˜ c++ ๊ฐ™์€ ์–ธ์–ด๋“ค์€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ๋ฐ”๋กœ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•ด์ค€๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ ๋ชจ๋“  ์ปดํ“จํ„ฐ ์šด์˜์ฒด์ œ๋“ค์ด ๊ฐ™์€ ์–ธ์–ด๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ž€ ๊ฑฐ๋‹ค.

์ด๋กœ ์ธํ•ด ๋งฅ์—์„œ ์ปดํŒŒ์ผํ•œ ํŒŒ์ผ์ด ์œˆ๋„์šฐ๋‚˜ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์•ˆ ๋Œ์•„๊ฐ€๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

 

์™œ๋ƒํ•˜๋ฉด c๋‚˜ c++์€ ๊ฐ ๋จธ์‹ ์— ๋งž๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๋กœ ์ปดํŒŒ์ผ์„ ํ•ด์ค€๋‹ค.

์†๋„ ๋ฉด์—์„œ๋Š” ๋น ๋ฅผ ์ง€ ๋ชฐ๋ผ๋„ ๋‹ค๋ฅธ ํ™˜๊ฒฝ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋–จ์–ด์ง„๋‹ค.

ํ•˜์ง€๋งŒ JVM์€ WORA ๋ผ๋Š” ์ฒ ํ•™์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ๋งŒ๋“ค์–ด์กŒ๋‹ค.

 

*WORA

Write Once Run Anywhere

ํ•œ๋ฒˆ ์“ฐ๊ณ  ์–ด๋””๋“  ๋Œ์•„๊ฐ„๋‹ค.

์ด๋Ÿฐ ํŠน์ง• ๋•๋ถ„์— ์ž๋ฐ”๋Š” ์šด์˜์ฒด์ œ ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

JRE , JDK ์™€์˜ ๊ด€๊ณ„

JVM๊ณผ ์ด๋ฆ„์ด ๋น„์Šทํ•œ JRE,JDK๋Š” ์–ด๋–ค ๊ด€๊ณ„์ผ๊นŒ?

๊ฒฐ๋ก  ์ ์œผ๋กœ ๋งํ•˜๋ฉด JVM์ด ์ œ์ผ ์ž‘๊ณ  ์„œ๋กœ ํฌํ•จ๋˜๋Š” ๊ด€๊ณ„์ด๋‹ค.

 

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์ž

 

 

JVM์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

JRE๋Š” ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ , ํŒŒ์ผ๋“ค์„ ํฌํ•จํ•œ๋‹ค.

JDK๋Š” ๊ทธ ์™ธ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋””๋ฒ„๊น… , ์ปดํŒŒ์ผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

 

JVM ํŠน์ง• ์ •๋ฆฌ

 

  • ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹ ์ด๋‹ค.
  • ์‹ฌ๋ณผ๋ฆญ ๋ ˆํผ๋Ÿฐ์Šค
    • ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ, ์ด๋ฆ„์œผ๋กœ ์ฐธ์กฐํ•œ๋‹ค.

 

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
    • ๋” ์ด์ƒ ํ• ๋‹น๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ค€๋‹ค.

 

  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ ๋ณด์žฅ
    • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

 

  • ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์˜ค๋”
    • ๋น… ์—”๋””์•ˆ ๋ฐ”์ดํŠธ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ†ต์‹ ์„ ํ•œ๋‹ค.

 

๋น… ์—”๋””์•ˆ ํ‘œ๊ธฐ๋ฒ•์ด๋ž€?

0x12 0x34 0x56 0x78 ๊ณผ ๊ฐ™์ด ๋‚ฎ์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ๋†’์€ ์ฃผ์†Œ ์ˆœ์œผ๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ์‹

 

JVM ๋ช…์„ธ

JVM ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€์žˆ๋‹ค.

To implement the Java Virtual Machine correctly, you need only be able to

read the class file format and correctly perform the operations specified therein. Implementation details that are not part of the Java Virtual Machine's specification would unnecessarily constrain the creativity of implementors.

 

 

์š”์•ฝ์„ ํ•ด๋ณด๋ฉด , ๊ตฌํ˜„์ž์˜ ์ฐฝ์˜์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์ธ ๋ช…์„ธ๋ฅผ ์ œ์™ธํ•œ ์„ธ์„ธํ•œ ๋ถ€๋ถ„์€ ์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ”ํžˆ ํ–‰๋™๋งŒ ์ถ”์ƒํ™” ํ•ด๋‘๊ณ  ๊ตฌํ˜„ ์ฑ…์ž„์€ ๋ฒค๋”์‚ฌ๋“ค์—๊ฒŒ ๋งก๊ธด ๊ฑฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ ๊ฒฐ๊ณผ ๋ฌด์ˆ˜ํ•œ JVM ๋ฒค๋”์‚ฌ๋“ค์ด ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜์˜€๊ณ  ํ˜„์žฌ๋„ ๋งŽ์€ JVM์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

ex) Oracle ์˜ ํ•ซ์ŠคํŒŸ , IBM์˜ Open J9 ๋“ฑ๋“ฑ ..

 

JVM ๋™์ž‘๊ณผ์ •

์•ž์„œ JVM์ด ๋Œ€๋žต ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์•˜์œผ๋ฉด ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๊ตฌ์ฒด์ ์ธ ๋™์ž‘๊ณผ์ •์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

JVM ๊ตฌ์กฐ

 

์ „์ฒด์ ์ธ ๋™์ž‘ ๋ฐฉ์‹

JVM์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ƒ์„ธํ•œ ๋ฐฉ์‹์€ ์‚ด์ง ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  2. ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํด๋ž˜์Šค ๋กœ๋”์— ์ „๋‹ฌํ•œ๋‹ค.
  3. ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ „๋‹ฌํ•œ๋‹ค.
  4. ์‹คํ–‰ ์—”์ง„์ด ํ•ด๋‹น ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ ์‹œํ‚จ๋‹ค.

ํด๋ž˜์Šค ๋กœ๋”

ํด๋ž˜์Šค ๋กœ๋”์˜ ๊ตฌ์กฐ

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

 

  • ์ต์Šคํ…์…˜ ํด๋ž˜์Šค ๋กœ๋”
    • ์ž๋ฐ” ํด๋ž˜์Šค์˜ ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ํƒ‘์žฌํ•œ๋‹ค.

 

  • ์‹œ์Šคํ…œ ํด๋ž˜์Šค ๋กœ๋”(Application ClassLoader)
    • ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž‘์„ฑํ•œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ํƒ‘์žฌํ•œ๋‹ค.
    • ์ด๊ฒƒ์„ ์ƒ์†ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ๋ชจ๋“  ํด๋ž˜์Šค ๋กœ๋”์— ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์—†์„ ์‹œ ,

ClassNotFoundException ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ณผ์ •

 

 

ํด๋ž˜์Šค ์–ด๋–ป๊ฒŒ ์–ด๋–ป๊ฒŒ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž

  • ๋กœ๋“œ
    • ํด๋ž˜์Šค๋ฅผ ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์™€์„œ JVM ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค.

 

  • ๋งํฌ
    • ๊ฒ€์ฆ(Verifying)
      • ํด๋ž˜์Šค ํŒŒ์ผ์ด ์œ ํšจํ•œ์ง€๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.
      • ์ž๋ฐ” ๋ช…์„ธ , JVM ๋ช…์„ธ๋ฅผ ์ž˜ ์ง€์ผฐ๋Š” ์ง€ ํ™•์ธํ•˜๋ฉฐ ๋งŒ์•ฝ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ ๋ชปํ•˜์˜€์„ ์‹œ์— VerifyError๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
    • ์ค€๋น„(Preparing)
      • ํด๋ž˜์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์— ํ•„์š”ํ•œ static field์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
    • ๋ถ„์„(Resolving):
      • constant pool ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  **์‹ฌ๋ณผ๋ฆญ ์ฐธ์กฐ ๊ฐ’๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(๋‹ค์ด๋ ‰ํŠธ)**๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

 

  • ์ดˆ๊ธฐํ™”
    • ์ค€๋น„๊ณผ์ •์—์„œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์คฌ๋˜ static filed๋“ค์„ ์ฝ”๋“œ์— ์ž‘์„ฑํ•ด์คฌ๋˜ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

์ด ๊ณผ์ •๊นŒ์ง€ ๋งˆ์ณค์œผ๋ฉด JVM์—์„œ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๊ตฌ๋™์‹œํ‚ฌ ์ค€๋น„๊ฐ€ ๋๋‚˜๊ฒŒ ๋œ๋‹ค.

 

ํด๋ž˜์Šค ๋กœ๋”์˜ ํŠน์ง•

  • ์œ„์ž„ ๋ชจ๋ธ
    • ํด๋ž˜์Šค ๋กœ๋”๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํด๋ž˜์Šค ๋กœ๋”๋ผ๋ฆฌ ๋กœ๋“œ๋ฅผ ์œ„์ž„ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•œ๋‹ค.
    • ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์š”์ฒญ์„ ์œ„์ž„ํ•ด๊ฐ€๋ฉด์„œ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฐพ๋Š”๋ฐ, ๋ชจ๋“  ํด๋ž˜์Šค ๋กœ๋”์— ์—†์œผ๋ฉด ํด๋ž˜์Šค ํŒจ์Šค์—์„œ ์ฐพ์•„๋ณด๊ณ  ๊ฑฐ๊ธฐ์—๋„ ์—†์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ํด๋ž˜์Šค ๋กœ๋”๋ผ๋ฆฌ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ์ด๋ฃจ์–ด ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”์ด๋‹ค.

 

  • ๊ฐ€์‹œ์„ฑ(visibility) ์ œํ•œ
    • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค ๋กœ๋”๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋กœ๋”์˜ ํด๋ž˜์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ , ๊ทธ ๋ฐ˜๋Œ€๋Š” ์•ˆ๋œ๋‹ค. (๊ณ„์ธต ๊ตฌ์กฐ)
    • ํ•˜์œ„ ํด๋ž˜์Šค ๋กœ๋”๋Š” ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”์˜ ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๋Š” ํ•˜์œ„ ํด๋ž˜์Šค ๋กœ๋”์˜ ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.

 

  • ์–ธ๋กœ๋“œ ๋ถˆ๊ฐ€
    • ํด๋ž˜์Šค ๋กœ๋”๋Š” ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์–ธ๋กœ๋“œํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์–ธ๋กœ๋“œ ๋Œ€์‹ , ํ˜„์žฌ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์•„์˜ˆ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ์œ ์ผ์„ฑ
    • ํ•˜์œ„ ํด๋ž˜์Šค ๋กœ๋”๋Š” ์ƒ์œ„ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๋กœ๋”ฉํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ค์‹œ ๋กœ๋”ฉํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ํšจ์œจ์ ์œผ๋กœ ๋กœ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

 

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ

 

 

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์€ JVM์ด OS ํ• ๋‹น ๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.

ํฌ๊ฒŒ 6๊ฐ€์ง€์˜ ์˜์—ญ์ด ์žˆ๋Š”๋ฐ , ๊ณตํ†ต์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ ํ•œ๊ฒƒ๊ณผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๊ตฌ๋ถ„ ์ง€์–ด ์•Œ์•„๋ณด์ž

 

๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

 

์“ฐ๋ ˆ๋“œ ๋‚ด์— ์žˆ๋Š” ๊ฒƒ๋“ค์€ ์„œ๋กœ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๋‹ค.

  1. JVM ์Šคํƒ
    • ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ˆ˜ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์Šคํƒ ํ”„๋ ˆ์ž„์ด ํ•˜๋‚˜์”ฉ ์Œ“์ด๊ฒŒ ๋œ๋‹ค.
    • ์Šคํƒ ํ”„๋ ˆ์ž„์—๋Š” ์ง€์—ญ ๋ณ€์ˆ˜ ๋ฐฐ์—ด์ด๋‚˜ ํ”ผ์—ฐ์‚ฐ์ž ์Šคํƒ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ง€์—ญ ๋ณ€์ˆ˜ ๋ฐฐ์—ด๊ณผ ์Šคํƒ ๊ธฐ๋ฐ˜ ์—ฐ์‚ฐ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š” ์ง€ ์•Œ์•„๋ณด์ž
int num = 1; // ์Šคํƒ ํ”„๋ ˆ์ž„์— ์Œ“์ž„ 
int sum = num + 5; // ์Šคํƒ ํ”„๋ ˆ์ž„์— ์Œ“์ž„

 

์ด๋Ÿฐ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ JVM ์Šคํƒ ๋‚ด์—์„œ๋Š” ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

์ผ๋‹จ ์œ„์—์„œ ๋งํ•œ ๋Œ€๋กœ ์Šคํƒ ํ”„๋ ˆ์ž„์— ๋ฉ”์†Œ๋“œ๊ฐ€ ์Œ“์ด๊ฒŒ ๋  ๊ฒƒ ์ด๋‹ค.

 

๊ทธ ๋‹ค์Œ ์ง€์—ญ ๋ณ€์ˆ˜ ๋ฐฐ์—ด์— ํŒŒ๋ผ๋ฏธํ„ฐ , ๋ณ€์ˆ˜๋“ค์ด ์ €์žฅ์ด ๋˜๋Š” ๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ €์žฅ๋œ๋‹ค.

๋‹ค์‹œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ณด์ž

L0
    LINENUMBER 15 L0
    ICONST_1 // ์Šคํƒ์— ์ •์ˆ˜๊ฐ’ 1์„ ์˜ฌ๋ฆฐ๋‹ค.
    ISTORE 1 // ์Šคํƒ์— ์žˆ๋Š” ์ •์ˆ˜๊ฐ’์„ ๊บผ๋‚ด์„œ 1๋ฒˆ ์ธ๋ฑ์Šค์— ์ €์žฅ
   L1
    LINENUMBER 16 L1
    ILOAD 1 // 1๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์Šคํƒ์— ์˜ฌ๋ ค๋ผ
    ICONST_5 // ์Šคํƒ์— ์ •์ˆ˜๊ฐ’ 5๋ฅผ ์˜ฌ๋ฆฐ๋‹ค.
    IADD // ์Šคํƒ ์ƒ๋‹จ ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ๋”ํ•œ๋‹ค.
    ISTORE 2 // 2๋ฒˆ ์ธ๋ฑ์Šค์— ์ €์žฅํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์—ฐ์‚ฐ์„ ๋งˆ์น˜๊ฒŒ ๋œ๋‹ค.

 

 

2.PC ๋ ˆ์ง€์Šคํ„ฐ

  • ํ˜„์žฌ JVM ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ์“ฐ๋ ˆ๋“œ ๊ณต์œ ์˜ ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.
  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋œ๋‹ค.

3.๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ

  • JNI ๋ผ๋Š” ๊ฒƒ์€ ํ†ตํ•ด ์ž๋ฐ”๊ฐ€ ์•„๋‹Œ c๋‚˜ c++์„ ํ†ตํ•ด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜์˜€์„ ์‹œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์ด๋‹ค.

๊ณต์œ ํ•˜๋Š” ๊ฒƒ

  1. ํž™
    • ์ธ์Šคํ„ด์Šค ํ˜น์€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์ž‘์—…์ด ์ฃผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
  2. ๋ฉ”์„œ๋“œ ์˜์—ญ
    • ํด๋ž˜์Šค ๋กœ๋”๋กœ ๋ถ€ํ„ฐ ๋ถˆ๋Ÿฌ์˜จ ํด๋ž˜์Šค์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ •๋ณด๋“ค์„ ์ €์žฅํ•œ๋‹ค.

์‹คํ–‰ ์—”์ง„

์‹คํ–‰ ์—”์ง„์—์„œ ๋น„๋กœ์†Œ ๊ธฐ๊ณ„์–ด๋กœ์˜ ๋ฒˆ์—ญ์„ ์‹œ์ž‘ํ•œ๋‹ค.

์ด๋•Œ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์“ฐ์ด๋Š” ๋ฐ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ JIT ๋ฐฉ์‹์ด๋‹ค.

 

์ธํ„ฐํ”„๋ฆฌํ„ฐ

  • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ํ•ด์„์€ ๋น ๋ฅด์ง€๋งŒ ์‹คํ–‰์€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
  • ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

JIT(Just-In-Time)

  • ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•œ๋‹ค.
  • ์ดํ›„ ์ธํ„ฐํ”„๋ฆฌํŒ…์„ ํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋ฉฐ ํ•œ๋ฒˆ ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ์ €์žฅ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ฒ˜์Œ ์ปดํŒŒ์ผ ๊ณผ์ •์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ํ•œ๋ฒˆ๋งŒ ์“ฐ๋Š” ๋ฉ”์†Œ๋“œ๋Š” JIT ์‚ฌ์šฉ์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

JVM์— ๊ด€ํ•˜์—ฌ - Part 2, ClassLoader

 

JVM์— ๊ด€ํ•˜์—ฌ - Part 2, ClassLoader

Java ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š” ๊ฑธ๊นŒ? ํ•ด๋‹น ๋ฌผ์Œ์— ๋‹ต์„ ์ฐพ๊ธฐ ์œ„ํ•œ JVM ์‹œ๋ฆฌ์ฆˆ 2ํŽธ, JVM ์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ClassLoader ์— ๊ด€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ClassLoader…

tecoble.techcourse.co.kr

JVM. ํด๋ž˜์Šค๋กœ๋” ์„œ๋ธŒ์‹œ์Šคํ…œ(Class Loader Subsystem)

 

JVM. ํด๋ž˜์Šค๋กœ๋” ์„œ๋ธŒ์‹œ์Šคํ…œ(Class Loader Subsystem)

JVM์€ RAM์— ์œ„์น˜ํ•˜๋ฉฐ, ์‹คํ–‰ ์ค‘์— ํด๋ž˜์Šค๋กœ๋” ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜์—ฌ ํด๋ž˜์Šค ํŒŒ์ผ์„ RAM์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ž๋ฐ”์˜ ๋™์  ํด๋ž˜์Šค ๋กœ๋”ฉ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์ปดํŒŒ์ผ ํƒ€์ž„์ด ์•„๋‹ˆ๋ผ ๋Ÿฐํƒ€

blog.hexabrain.net

https://www.youtube.com/watch?v=6reapO0gLPs&t=399s