ch19 : JVM

๋ชฉ์ฐจ

  1. GC

JVM JRE JDK

  • JVM (Java Virtual Machine)

    • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JVM ์œ„์—์„œ ๋™์ž‘ํ•œ๋‹ค.

  • JRE (Java Runtime Environment) :

    • (์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ) ์‹คํ–‰์„ ์œ„ํ•œ ํ™˜๊ฒฝ

    • ์ž๋ฐ” ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Java class libraries) + ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)

  • JDK (Java Develope Kit)

    • ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ

    • JRE์— ์ถ”๊ฐ€๋กœ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ์™€ ๊ฐ™์€ ๋ช…๋ น์–ดํ–‰ ๊ฐœ๋ฐœ ๋„๊ตฌ๋„ ํฌํ•จ๋œ๋‹ค.

์ž๋ฐ”๋Š” OS์— ๋…๋ฆฝ์ ์ด๋‹ค

  • ์–ด๋–ค OS๋กœ ์ ‘๊ทผํ•ด๋„ JAVA๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด JVM๋ฅผ ํ†ตํ•ด์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์ฆ‰, OS์œ„์— JRE/JDK๋ฅผ ๋‹ค์šด ๋ฐ›์•„์„œ ๋™์ž‘์‹œํ‚ด) OS์— ๋…๋ฆฝ์ ์ด๊ฒŒ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค. (Write Once Run Anywhere)

  • c/c++๋“ฑ ์ž๋ฐ” ์ด์ „์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋Œ€์ƒ ์ปดํ“จํ„ฐ์˜ cpu์™€ ์šด์˜์ฒด์ œ์— ์ข…์†์ ์ธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

JIT ์ปดํŒŒ์ผ๋Ÿฌ

Interpreter (์ธํ„ฐํ”„๋ฆฌํŠธ) ๋ฐฉ์‹ : ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ์‹œ์— ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ(๋Ÿฐํƒ€์ž„ ์‹œ)๋งˆ๋‹ค ๋ณ€ํ™˜ โ†’ ๊ฐ„ํŽธํ•˜๋‚˜ ์†๋„๊ฐ€ ๋Š๋ฆผ Static Complie (์ •์  ์ปดํŒŒ์ผ) ๋ฐฉ์‹ : ์‹คํ–‰ ์ „์— ์ „๋ถ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

JIT (Just-In-Time)๋ž€

  • ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ธํ„ฐํ”„๋ฆฌํŠธ์™€ ์ •์  ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ํ˜ผํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ๊ณ„์†ํ•˜๊ณ  + ํ•œ๋ฒˆ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ์ €์žฅํ•˜์˜€๋‹ค๊ฐ€ ํ•„์š”์‹œ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

    • ๋”ฐ๋ผ์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜๊ณ , ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

  • ๋™์  ๋ณ€ํ™˜์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, Java์™€ C#์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

JVM ๋™์ž‘ ๊ณผ์ • - ์—ฌ๊ธฐ์„œ JIT๋Š” ์–ธ์ œ?

  1. ์ž๋ฐ” ์†Œ์Šค(.java)๋ฅผ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.

  2. ์ž๋ฐ”๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋™์ ์œผ๋กœ ์ฝ์–ด์˜จ๋‹ค. ์ฆ‰, JVM์ด ๋™์ž‘ํ•˜๋‹ค๊ฐ€ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” ์ˆœ๊ฐ„ ๋™์ ์œผ๋กœ ์ฝ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•œ๋‹ค.

  3. ์‹คํ–‰ ์—”์ง„(Execution Engine)์€ JVM ๋ฉ”๋ชจ๋ฆฌ(Runtime Data Area)์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ๊ณผ์ •์—์„œ JVM์˜ Execution Engine์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์ด๋‹ค.

Hotspot

  • Hotspot JVM์€ ์„ฑ๋Šฅ์ด ์ €ํ•˜๊ฐ€ ๋ ๋งŒํ•œ ๋ถ€๋ถ„(HotSpot)์„ ์ฐพ๊ณ , ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ด๋•Œ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Client์™€ Server ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

    • HotSpot ํด๋ผ์ด์–ธํŠธ ์ปดํŒŒ์ผ๋Ÿฌ

      • CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋ฟ์ธ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๋น ๋ฅด๊ฒŒํ•˜๊ณ , ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•˜๋„๋ก ํ•œ๋‹ค.

    • HotSpot ์„œ๋ฒ„ ์ปดํŒŒ์ผ๋Ÿฌ

      • ์ฝ”์–ด๊ฐ€ ๋งŽ์€ ์žฅ๋น„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜ํ–‰ ์†๋„์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๋‹ค.

Last updated