Programming/Java

TIL_W01 | JVM, Bytecode, JDK, JRE, JIT Compiler

osean 2020. 12. 14. 22:30

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ

Java๋ฅผ ๊ตญ๋น„๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ•ด๋‹น ์–ธ์–ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋” ํƒ„ํƒ„ํžˆ ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ๋ชฉํ‘œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
ํ•˜๋Š˜๋„ ์•Œ์•˜๋Š”์ง€ 2020๋…„์ด ๋๋‚˜๊ธฐ ์ „์— ๋ฐฑ๊ธฐ์„ ๋‹˜๊ป˜์„œ ์šด์˜ํ•˜๋Š” Online Java Study์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ์˜ค๋žœ ๊ธฐ๊ฐ„ ๊นŒ๋จน๊ณ  ์ง€๋‚ด๋˜ Java ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋” ํƒ„ํƒ„ํžˆ ํ•˜๊ณ , ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์ฑ„์šฐ๋Š” ์‹œ๊ฐ„์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ๊พธ์ค€ํžˆ ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.

 

Java Compile Structure

Java๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ์„œ,
์–ด๋– ํ•œ ์šด์˜์ฒด์ œ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

  1. Java File Build

    1. .java → Java Compiler(javac) → .class
      • Java Compiler(javac)๊ฐ€ .java ํ™•์žฅ์ž ํŒŒ์ผ์„ JVM(Java Virture Machine)์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Bytecode๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ํ™•์žฅ์ž๊ฐ€ .class ํ™•์žฅ์ž ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
  2. JVM

    1. Class Loader
    2. Runtime Data Areas
    3. Execution Engine
      • ๋ฒˆ์—ญ๋œ .class ํ™•์žฅ์ž ํŒŒ์ผ์„ JVM์˜ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ Class Loader๋ฅผ ํ†ตํ•ด Bytecode๋ฅผ Runtime Data Areas์— ๋กœ๋“œํ•œ๋‹ค.
        Runtime Data Areas์—์„œ ์šด์˜์ฒด์ œ ์œ„์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น ๋ฐ›์œผ๋ฉด Bytecode๋ฅผ Execution Engine์œผ๋กœ ์ด๋™ํ•˜์—ฌ Interpreter ํ˜น์€ JIT Compiler๋ฅผ ํ†ตํ•ด ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•œ๋‹ค.

 

Bytecode

Java Compiler๋ฅผ ์ด์šฉํ•ด .java๋ฅผ JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฒˆ์—ญํ•œ ์ฝ”๋“œ์ด๋ฉฐ, .class ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„๋‹ค.

๊ฐ๊ฐ์˜ Bytecode๋Š” 1byte๋กœ ๊ตฌ์„ฑ๋˜์ง€๋งŒ ๋ช‡ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ์ด ๋ช‡ ๋ฐ”์ดํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
๋˜ํ•œ, Bytecode๋ฅผ ์กฐ์ž‘ํ•ด ๋งŽ์€ ๊ฒƒ๋“ค์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํ”„๋กœ๊ทธ๋žจ ๋ถ„์„
    • ์ฝ”๋“œ์—์„œ ๋ฒ„๊ทธ ์ฐพ๋Š” ํˆด
    • ์ฝ”๋“œ ๋ณต์žก๋„ ๊ณ„์‚ฐ
  2. ํด๋ž˜์Šค ํŒŒ์ผ ์ƒ์„ฑ
    • ํ”„๋ก์‹œ
    • ํŠน์ • API ํ˜ธ์ถœ ์ ‘๊ทผ ์ œํ•œ
    • ์Šค์นผ๋ผ ๊ฐ™์€ ์–ธ์–ด์˜ ์ปดํŒŒ์ผ๋Ÿฌ
  3. ํ”„๋กœํŒŒ์ผ๋Ÿฌ
  4. ์ตœ์ ํ™”

์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์„ฑ๋œ .java ํŒŒ์ผ

package Week_01;

public class Day_01 {
    public static void main(String[] args) {
        System.out.println("Hello Study!");
    }
}

IntelliJ์—์„œ Bytecode ํ™•์ธํ•˜๊ธฐ

  • IntelliJ → Command + A → Show Bytecode
// class version 55.0 (55)
// access flags 0x21
public class Week_01/Day_01 {

  // compiled from: Day_01.java

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

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

javap๋ฅผ ์ด์šฉํ•ด .class ํŒŒ์ผ ํ™•์ธํ•˜๊ธฐ

  • Terminal → javap -v -l -p ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„.class
public class Week_01.Day_01
  minor version: 0
  major version: 55
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #5                          // Week_01/Day_01
  super_class: #6                         // java/lang/Object
  interfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:
   #1 = Methodref          #6.#15         // java/lang/Object."<init>":()V
   #2 = Fieldref           #16.#17        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = String             #18            // Hello Study!
   #4 = Methodref          #19.#20        // java/io/PrintStream.println:(Ljava/lang/String;)V
   #5 = Class              #21            // Week_01/Day_01
   #6 = Class              #22            // java/lang/Object
   #7 = Utf8               <init>
   #8 = Utf8               ()V
   #9 = Utf8               Code
  #10 = Utf8               LineNumberTable
  #11 = Utf8               main
  #12 = Utf8               ([Ljava/lang/String;)V
  #13 = Utf8               SourceFile
  #14 = Utf8               Day_01.java
  #15 = NameAndType        #7:#8          // "<init>":()V
  #16 = Class              #23            // java/lang/System
  #17 = NameAndType        #24:#25        // out:Ljava/io/PrintStream;
  #18 = Utf8               Hello Study!
  #19 = Class              #26            // java/io/PrintStream
  #20 = NameAndType        #27:#28        // println:(Ljava/lang/String;)V
  #21 = Utf8               Week_01/Day_01
  #22 = Utf8               java/lang/Object
  #23 = Utf8               java/lang/System
  #24 = Utf8               out
  #25 = Utf8               Ljava/io/PrintStream;
  #26 = Utf8               java/io/PrintStream
  #27 = Utf8               println
  #28 = Utf8               (Ljava/lang/String;)V
{
  public Week_01.Day_01();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 3: 0

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
         0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: ldc           #3                  // String Hello Study!
         5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         8: return
      LineNumberTable:
        line 5: 0
        line 6: 8
}

 

JVM

Java Virtual Machine, .class ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ด ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•œ๋‹ค.

JVM์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
์ด์— ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•˜๋Š”๋ฐ, Java ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋Š ๊ธฐ๊ธฐ๋‚˜ ์šด์˜์ฒด์ œ ์ƒ์—์„œ๋„ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๋˜ํ•œ, ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ตœ์ ํ™”ํ•œ๋‹ค.(Garbage Collection)

JVM Components

์ด๋ ‡๊ฒŒ JVM์ด OS์— ์ข…์†์ ์ด์ง€ ์•Š์œผ๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ ๊ฐ€์ง€์˜ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ํ•จ๊ป˜ ์ผํ•œ๋‹ค.

  1. Class Loader

    Class Loader๋Š” Bytecode๋กœ ๊ตฌ์„ฑ๋œ .class ํŒŒ์ผ์„ Runtime Data Areas์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๊ธฐ ์œ„ํ•ด ์ฝ์–ด ๋“ค์ธ๋‹ค.

  2. Runtime Data Areas

    Runtime Data Areas(๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ)์€ JVM์ด ์šด์˜์ฒด์ œ์— ์‹คํ–‰๋˜๋ฉด์„œ ํ• ๋‹น๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ํ•ด๋‹น ์˜์—ญ์—๋Š” 6๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค.

    • ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ• ๋‹น ๋ฐ›๋Š” ์˜์—ญ
      • PC Register
      • JVM Stack
      • Native Method Stack
    • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ
      • Heap
      • Method Area
      • Runtime Constant Pool
  3. Execution Engine
    Class Loader๋ฅผ ํ†ตํ•ด JVM ๋‚ด์˜ Runtime Data Areas์— ๋ฐฐ์น˜๋œ Bytecode๋Š” Execution Engine์— ์˜ํ•ด ์‹คํ–‰๋˜๋ฉฐ, Execution Engine์€ Bytecode๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
    ์ด๋Š” Interpreter ํ˜•์‹ ํ˜น์€ JIT Compiler๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•˜๋ฉฐ, Garbage Collection์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

  • Interpreter
    • ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์ฝ”๋“œ๋ฅผ ํ•œ ํ–‰์”ฉ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•œ๋‹ค.
      ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฌ์ง€๋งŒ ์ฝ”๋“œ ๋ฒˆ์—ญ์‹œ ์ฆ‰์‹œ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ์— ์šฉ์ดํ•˜๋‹ค.
  • JIT Compiler
    • Bytecode๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ Interpreter์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์บ์‹ฑ ํ•ด๋†“์€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ถˆ๋ ค๋„ ๊ฐ™์€ ๊ธฐ๊ณ„์–ด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ๊ธฐ๊ณ„์–ด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
  • Garbage Collection
    • Java์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ํ•ด์ฒดํ•˜์ง€ ์•Š๋Š”๋ฐ, ์ด ๋•Œ Garbage Collection์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ง€์šฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด๋•Œ, GC๋Š” Heap ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ๋‹ค๋ฃจ๋ฉฐ Young / Old ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.

JIT Compiler

  • Bytecode๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•  ๋•Œ JIT Compiler๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    JVM์ด Interpreter๋ฅผ ์ด์šฉํ•ด Btyecode์—์„œ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•  ๋•Œ, ๋ฐ˜๋ณต๋˜๋Š” ๋‚ด์šฉ์„ ์ปดํŒŒ์ผํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ, ์ตœ์ดˆ ์‹คํ–‰ ์‹œ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธด ํ•˜์ง€๋งŒ ์ตœ์ดˆ ์‹คํ–‰ํ•˜๋ฉด ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๋˜ํ•œ, ์ปดํŒŒ์ผ ์—†์ด Interpreter๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ๋ณด๋‹ค ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ํ•  ๋•Œ ๋†’์€ ํšจ์œจ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

Runtime

์ง€๊ธˆ๊นŒ์ง€ Eclipse๋‚˜ IntelliJ๋กœ ์†์‰ฝ๊ฒŒ ์ปดํŒŒ์ผํ•˜๋ฉด์„œ ์ •์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ๋Š” ์žŠ๊ณ  ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์„ ํ†ตํ•ด ์ง์ ‘ ์ปดํŒŒ์ผ ํ•ด๋ณด์ž!

๋‚˜๋Š” ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•œ .java ํŒŒ์ผ์„ ์ด์šฉํ•ด ์ปดํŒŒ์ผ ํ•ด๋ณผ ๊ณ„ํš์ด๋‹ค.ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ , ์ปดํŒŒ์ผํ•˜๊ณ ์ž ํ•˜๋Š” .java ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•œ๋‹ค.
๊ทธ ์ดํ›„์— ํ•ด๋‹น ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 cd ๊ฒฝ๋กœ/ํŒŒ์ผ์ด๋ฆ„.java
 ls

ํŒŒ์ผ์„ ํ™•์ธํ–ˆ๋‹ค๋ฉด Java Compiler๋ฅผ ์ด์šฉํ•ด .java ํŒŒ์ผ์„ Bytecode์˜ .class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
๊ทธ ํ›„, .class ํŒŒ์ผ์ด ์ƒ๊ฒผ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 javac ํŒŒ์ผ์ด๋ฆ„.java
 ls

 

.class ํŒŒ์ผ์„ JVM์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” src ํด๋”๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
cd .. ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ƒ์œ„ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉฐ, src ํด๋”์—์„œ ํŒจํ‚ค์ง€/ํŒŒ์ผ ์ด๋ฆ„์„ ์ด์šฉํ•ด .class ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•œ๋‹ค.

 cd ..
 java ํŒจํ‚ค์ง€/ํŒŒ์ผ์ด๋ฆ„


 

JDK / JRE

Java Development Kit / Java Runtime Enviroment
JDK = JRE + @

JDK

๋งˆ์น˜ ์™ธ์žฅํ•˜๋“œ๋‚˜ USB ๋“ฑ ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์žฅ์น˜์™€๋„ ๊ฐ™๋‹ค.
์ฆ‰, JRE๋ฅผ ํฌํ•จํ•œ Compiler, Debuger ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ๋„๊ตฌ๋ฅผ ํฌํ•จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

JRE

๋ฌด๋ฃŒ PDF Reader์ฒ˜๋Ÿผ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
JVM, Java API, ๊ธฐ๋ณธ ์ œ๊ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ Java๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

Reference

Java Compile Structure, JVM Components

  • Naver D2

https://d2.naver.com/helloworld/1230

Runtime

  • ๋ฐฑ๊ธฐ์„ ๋‹˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
 

macOS ํ„ฐ๋ฏธ๋„ ์ž๋ฐ” ์ปดํŒŒ์ผ ์‹คํ–‰ ๋ฐฉ๋ฒ•

ํ„ฐ๋ฏธ๋„(Terminal)์—์„œ ์ž๋ฐ”(Java) ์‹คํ–‰ํ•˜๊ธฐ! ์ดํด๋ฆฝ์Šค(Eclipse), ์ธํ…”๋ฆฌJ(IntelliJ)์—์„œ ์ž‘์„ฑํ•œ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑ๋œ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ์•ผ ๋˜๋Š”๋ฐ ๋ฐฉ๋ฒ•์„ ์ž˜

whitepaek.tistory.com

  • ์ปดํŒŒ์ผ์—์„œ ์‹คํ–‰๊นŒ์ง€
 

Back to the Essence - Java ์ปดํŒŒ์ผ์—์„œ ์‹คํ–‰๊นŒ์ง€ - (2)

Back to the Essence - Java ์ปดํŒŒ์ผ์—์„œ ์‹คํ–‰๊นŒ์ง€ - (2)Java 11 JVM ์ŠคํŽ™์„ ๊ธฐ์ค€์œผ๋กœ Java ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋˜๋Š”์ง€ ์‚ด์ง ๊นŠ๊ฒŒ ์•Œ์•„๋ณด์ž. ์ด๋ฒˆ์—” 2ํƒ„ ์‹คํ–‰ ํŽธ์ด๋‹ค. 1ํƒ„ ์ปดํŒŒ์ผ ํŽธ์€ ์—ฌ๊ธฐ์—..

homoefficio.github.io

 

'Programming > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

F004 - Reference Type  (0) 2021.05.08
F003 - Access Modifier  (0) 2021.05.06
F002 - Primitive Type  (0) 2021.05.06
F001 - psvm  (0) 2021.05.06
TIL_W02 | Variable, Primitive / Reference Type, Literal, Array  (0) 2020.12.15