๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

JAVA 1์ฃผ์ฐจ: JVM, ๋ณ€์ˆ˜

KIMHYEYUN 2023. 10. 17. 10:06
๋ฐ˜์‘ํ˜•

JVM

  • Java Virtual Machine
  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๊ธฐ์œ„์— Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ์˜ ๊ธฐ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธ

์‹คํ–‰ ๊ณผ์ •

๐Ÿ’ก Java ์ปดํŒŒ์ผ๋Ÿฌ๋ž€?
์ž‘์„ฑํ•œ Java ์ฝ”๋“œ(.java ํŒŒ์ผ)์„ ์šด์˜์ฒด์ œ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class ํŒŒ์ผ)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ณ€ํ™˜๊ธฐ

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๐Ÿ“‡
    Java .class ์ฝ”๋“œ ํ•ด์„๊ธฐ
    • ์šด์˜์ฒด์ œ๊ฐ€ ์ฝ์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ธฐ(๊ธฐ๊ณ„)๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ
  • JIT ์ปดํŒŒ์ผ๋Ÿฌ ๐Ÿ“‡
    ๋น ๋ฅธ Java .class ์ฝ”๋“œ ํ•ด์„๊ธฐ
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ํšจ์œจ์„ ๋†’์—ฌ์ฃผ๋Š” ์„œํฌํ„ฐ ํ•ด์„๊ธฐ
  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๐Ÿ—‚๏ธ
    Java ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ
    • ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ JVM์ด ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
  • ํด๋ž˜์Šค ๋กœ๋” ๐Ÿšš
    Java .class ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋‹ด๋Š” ์šด๋ฐ˜๊ธฐ
    • JVM์œผ๋กœ class(๋ฐ”์ดํŠธ ์ฝ”๋“œ)๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋ฉ”๋ชจ๋ฆฌ๐Ÿ—‚๏ธ์— ์ €์žฅํ•จ
  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ๐Ÿงน
    Java ์“ฐ๋ ˆ๊ธฐ ์ฒญ์†Œ๊ธฐ
    • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ์•ˆ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ํก์ˆ˜ํ•ด๊ฐ€๋Š” ์ฒญ์†Œ๊ธฐ

JVM ๋™์ž‘

JRE?

Java Runtime Environment ์ฆ‰, ์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋ผ๋Š” ๋œป
JRE๋Š” .classํŒŒ์ผ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. JDK๊ฐ€ javac๋ช…๋ น์„ ํ†ตํ•ด .javaํŒŒ์ผ์„ ์‹คํ–‰๊ฐ€๋Šฅํ•œ .classํŒŒ์ผ์„ ๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

JDK?

Java Development Kit ์ฆ‰, ์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚คํŠธ๋ผ๋Š” ๋œป
JDK๋Š” JRE(JVM)์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๊ณ , .javaํŒŒ์ผ๋“ค์„ .classํŒŒ์ผ๋“ค๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” Java Compiler(javac) ๊ธฐ๋Šฅ, ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” jdb๋“ฑ์˜ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

JDK, JRE

๋ณ€์ˆ˜

๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜

  • ๋ณ€์ˆ˜ : ๋ณ€ํ•˜๋Š” ์ €์žฅ ๊ณต๊ฐ„
  • int number = 10; // 1. ๋ณ€์ˆ˜๋กœ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™” number = 11; // 2. ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค(๋ฎ์–ด์“ฐ๊ธฐ)
  • ์ƒ์ˆ˜ : ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ €์žฅ ๊ณต๊ฐ„
  • final int number = 10; //1. ์ƒ์ˆ˜๋กœ ์„ ์–ธ(final) number = 11; // e2. ๊ฐ’์„ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ!

๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜

  • ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜
  • ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜
    • ๋‹ค๋ฅธ ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๊ฐ€ ์‹ค์ œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„์ด๋ผ๋ฉด, ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋Š” ์‹ค์ œ ๊ฐ’์ด ์•„๋‹Œ ์›๋ณธ๊ฐ’์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅ
    • == ์ฃผ์†Œํ˜• ๋ณ€์ˆ˜
    • ์ €์žฅ ๊ด€์ ์—์„œ์˜ ์ฐจ์ด์ 
      • ๊ธฐ๋ณธํ˜• : ์›๋ณธ๊ฐ’์ด Stack ์˜์—ญ์— ์กด์žฌ
      • ์ฐธ์กฐํ˜• : ์›๋ณธ๊ฐ’์ด Heap ์˜์—ญ์— ์กด์žฌ
        • Stack ์˜์—ญ์—๋Š” ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘” ์›๋ณธ๊ฐ’์˜ Heap ์˜์—ญ์ฃผ์†Œ๋ฅผ ์ €์žฅ

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

Stack ์˜์—ญ vs Heap ์˜์—ญ
Stack์˜ ๊ฒฝ์šฐ์—๋Š” ์ •์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
๊ทธ๋ž˜์„œ, ํฌ๊ธฐ๊ฐ€ ๋ช‡ byte์ธ์ง€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋กœ, ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’๋„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Heap์˜ ๊ฒฝ์šฐ์—๋Š” ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
๊ทธ๋ž˜์„œ ํฌ๊ธฐ๊ฐ€ ๊ณ„์† ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜์˜ ์›๋ณธ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ž˜ํผ ํด๋ž˜์Šค ๋ณ€์ˆ˜
    • ๋ฐ•์‹ฑ vs ์–ธ๋ฐ•์‹ฑ
      • ๊ธฐ๋ณธ ํƒ€์ž…์—์„œ ๋ž˜ํผ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ์„ ๋ฐ•์‹ฑ
      • ๋ž˜ํผ ํด๋ž˜์Šค ํŽธ์ˆ˜๋ฅผ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์–ธ๋ฐ•์‹ฑ

๋ž˜ํผ ํด๋ž˜์Šค ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์ธ JAVA์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ, ํด๋ž˜์Šค๋กœ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ!

728x90
๋ฐ˜์‘ํ˜•