Bibi's DevLog ๐Ÿค“๐ŸŽ

[Java - JVM] JVM ๊ฐœ๋…๊ณผ ๋™์ž‘์›๋ฆฌ (๊ธฐ์ดˆ) ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Java ์ž๋ฐ”

[Java - JVM] JVM ๊ฐœ๋…๊ณผ ๋™์ž‘์›๋ฆฌ (๊ธฐ์ดˆ)

๋น„๋น„ bibi 2021. 2. 16. 00:10

JVM - Java Virtual Machine (JVM์ด๋ž€)

: ์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์‹คํ–‰ ์—”์ง„.

JVM์€ JRE์˜ ์ผ๋ถ€์ด๋‹ค.

  • JRE : Java Runtime Environment (ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

์ž๋ฐ”์˜ implementation์ด JVM์ด๋‹ค.

  • implementation : ๋ช…์„ธ์„œ๋ฅผ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๋Š” ๊ฒƒ.

.javaํŒŒ์ผ : ์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ” ์–ธ์–ด๋กœ ์ฝ”๋”ฉํ•œ ํŒŒ์ผ

.classํŒŒ์ผ : .javaํŒŒ์ผ์„ javac๋ช…๋ น์œผ๋กœ Java ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผํ•œ ํŒŒ์ผ. ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋˜์–ด ์žˆ๋‹ค

ํด๋ž˜์Šค ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉฐ ์ž๋ฐ” ํŒŒ์ผ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

JVM์˜ ๊ตฌ์„ฑ์š”์†Œ(3๊ฐ€์ง€)

1.Class Loader Sybsystem ํด๋ž˜์Šค ๋กœ๋” ํ•˜์œ„์‹œ์Šคํ…œ

  • ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•œ๋‹ค.
  • loading-linking-initialization ์„ ๊ฑฐ์นœ๋‹ค.
  • ๋™์ ์œผ๋กœ ํด๋ž˜์Šค ๋กœ๋”ฉ ๊ฐ€๋Šฅ
    = ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์— ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • *loading*
    : ํด๋ž˜์Šค ์ •๋ณด(FQCN - fulli qualified class name. ์ ˆ๋Œ€๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋œ ํด๋ž˜์Šค๋ช…) ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ
    ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด ๋ฉ”์†Œ๋“œ ์˜์—ญ์— ์ €์žฅํ•จ.
    • ํด๋ž˜์Šค ํŒŒ์ผ ํ•˜๋‚˜์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ Class ๊ฐ์ฒด๋งŒ ์ƒ์„ฑ๋จ.
  • linking ์—ฐ๊ฒฐ
    : ํด๋ž˜์Šค ํŒŒ์ผ์ด ์ •์ƒ์ ์ธ์ง€ ๊ฒ€์‚ฌ(verify)
    • ์ •์  ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ณธ๊ฐ’(0)์œผ๋กœ ์ €์žฅ
    • verification : ํด๋ž˜์Šค ํŒŒ์ผ์˜ ์ •ํ™•์„ฑ์„ ํ™•์ธ. (ํ˜•์‹ ๋“ฑ). ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ java.lang.VerifyError ๋ฐœ์ƒ
    • preparation : ํด๋ž˜์Šค ๋ณ€์ˆ˜์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•จ
    • resolution
  • initialization ์ดˆ๊ธฐํ™”
    • static ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”๋œ ๊ฐ’์œผ๋กœ ์ €์žฅํ•จ
    • static block ์‹คํ–‰
      : ํด๋ž˜์Šค๋กœ๋”์—์„œ static์„ ๋จผ์ € ์‹คํ–‰ํ•œ๋‹ค.

2.Runtime Data Area

  • ํด๋ž˜์Šค ๋กœ๋”์— ์˜ฌ๋ผ์˜จ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

JVM ๋ฉ”๋ชจ๋ฆฌ

๋ฉ”์†Œ๋“œ, ํž™, ์Šคํƒ, PC register๋กœ ๋˜์–ด ์žˆ๋‹ค

  • Method Area ๋ฉ”์†Œ๋“œ ์˜์—ญ : (Data, Stack area)
    ์•„๋ž˜์˜ ๊ฒƒ๋“ค ์™ธ์— ๋‚˜๋จธ์ง€ ๊ฒƒ๋“ค์ด ๋ชจ๋‘ ๋ฉ”์†Œ๋“œ ์˜์—ญ์— ๋“ค์–ด๊ฐ„๋‹ค.
    • ํด๋ž˜์Šค ์ •๋ณด, ๋ฆฌํ„ฐ๋Ÿด, static๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ ๋ฐ ๋ณ€์ˆ˜ ์ •๋ณด
    • JVM ํ•˜๋‚˜๋‹น 1๊ฐœ๋งŒ ์ƒ๊ธฐ๋ฉฐ, ๊ณต์œ ์ž์›์ด๋‹ค
  • *Heap Area ํž™ ์˜์—ญ *
    • ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•จ
    • ์ƒ์„ฑ์ž๊ฐ€ ์‹คํ–‰๋จ
    • JVM ํ•˜๋‚˜๋‹น 1๊ฐœ๋งŒ ์ƒ๊ธฐ๋ฉฐ, ๊ณต์œ ์ž์›์ด๋‹ค
  • Stack Area ์Šคํƒ ์˜์—ญ
    : ๋ฉ”์†Œ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ณต๊ฐ„. ๋ฉ”์†Œ๋“œ์˜ ์ง€์—ญ๋ณ€์ˆ˜๋งŒ ์ €์žฅ๋œ๋‹ค - ์ฝœ์Šคํƒ
    • ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„์˜ run-time stack area๋ฅผ ๊ฐ–๋Š”๋‹ค.
      (์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰)
    • ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด run-time stack์€ JVM์— ์˜ํ•ด ํŒŒ๊ดด๋œ๋‹ค.
    • ๊ณต์œ  ์ž์›์ด ์•„๋‹ˆ๋‹ค.
  • Program Counter register (PC Register)
    : ํ”„๋กœ๊ทธ๋žจ(์ฝ”๋“œ)๋ฅผ ์–ด๋””๊นŒ์ง€ ์‹คํ–‰ํ–ˆ๋Š”์ง€ ์•Œ๋ ค์คŒ
    • ์Šค๋ ˆ๋“œ์˜ ํ˜„์žฌ ์‹คํ–‰ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•จ
      (๊ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์–ด๋””๊นŒ์ง€ ์‹คํ–‰๋˜์—ˆ๋Š”์ง€ ์ €์žฅ)
    • (CPU์˜ program counter๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋งŒ๋“ค์–ด ๋‘” ๊ฒƒ
    • ๊ฐ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„์˜ PC Register๊ฐ€ ์žˆ์Œ.

3.Execution Engine ์‹คํ–‰ ์—”์ง„

  • 2.Runtime Data Area์— ์žˆ๋Š” .class(๋ฐ”์ดํŠธ ์ฝ”๋“œ)๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ๊ฐ JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด ๋ช…๋ น์„ ์‹คํ–‰ํ•จ.
  • ์ž๋ฐ” ์‹คํ–‰์‹œ ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ.
  • interpreter, JIT, GC ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค
  • Interpreter ์ธํ„ฐํ”„๋ฆฌํ„ฐ
    : ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰ํ•จ.
    ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด, ๋งค๋ฒˆ ํ•ด์„ํ•ด์•ผ ํ•จ. (JIT๊ฐ€ ์ด ๋‹จ์ ์„ ์ปค๋ฒ„ํ•จ)
  • JIT (Just-In-Time compiler)
    : ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ž„.
    ์ „์ฒด ํŒŒ์ดํŠธ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•ด,
    ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค JIT๊ฐ€ ํ•ด์„ํ–ˆ๋˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•จ.
    ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋งค๋ฒˆ ๋‹ค์‹œ ํ•ด์„ํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋จ
  • GC (Garbage Collector)
    : ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ํŒŒ๊ดดํ•จ.

๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์–ด๋””์— ์ €์žฅ๋˜๋‚˜? - ๋ฉ”์†Œ๋“œ ์˜์—ญ
์ •์  ๋ณ€์ˆ˜๋Š”? - ๋ฉ”์†Œ๋“œ ์˜์—ญ์—, ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๋กœ๋”ฉํ•  ๋•Œ
์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š”? - ํž™ ์˜์—ญ์—, new๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ ์ €์žฅ๋œ๋‹ค.

honbabzone.com/java/java-jvm/

[

JVM( Java Virtual Machine )์ด๋ž€

JAVA๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๊ธฐ๋ณธ์ด ๋˜๋Š” JVM์ด ๋ฌด์—‡์ธ์ง€ ํ•™์Šตํ•˜๊ณ , JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ Garbage collector, Execution Engine, Class Loader์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์„ค๋ช… ๋“ฑ JVM์ด ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์ดˆ๋ฅผ ์žก๋Š”

honbabzone.com

](https://honbabzone.com/java/java-jvm/)

์ด ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๋” ๊ณต๋ถ€ํ•˜์ž.