๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ”ญComputer Science๐Ÿ”ญ/JAVA

[JVM] Java Virtual Machine : ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด๋ž€?

JVM์ด๋ž€?

์Šคํƒ ๊ธฐ๋ฐ˜์˜ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์œผ๋กœ์„œ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • JVM์˜ ์—ญํ• 
    • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ์–ด๋“ค์ด๊ณ  ์ž๋ฐ” API์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• 

 

  • JVM์˜ ํŠน์ง•
    • JAVA์™€ OS์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ•  ์ˆ˜ํ–‰ (OS ์ข…์†์ ์ด์ง€ ์•Š์Œ) [JVM ์ž์ฒด๋Š” ์šด์˜์ฒด์ œ์— ์˜์กด์ ์ด๋ฏ€๋กœ ๋งž๊ฒŒ ์„ค์น˜ํ•ด์•ผํ•จ]
    • Garbage Collection์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
  • JVM ๊ตฌ์„ฑ
    • Class Loader
      • ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ Runtime์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ฒŒ ํ•จ
    • Runtime Data Areas
      • JVM์ด ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
        • PC Register, Java Virtual Machine Stack, Native Method Stack, Method Area, Heap
    • Execution Engine
      • Runtime Data Areas์— ๋กœ๋“œ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ Execution Engine์— ์˜ํ•ด์„œ ์‹คํ–‰๋จ

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์„ฑ

https://skibis.tistory.com/330

JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ์„ค๋ช…

  • Method Area : ๋ฉ”์„œ๋“œ์™€ ํด๋ž˜์Šค ๋ณ€์ˆ˜, ์ ‘๊ทผ ์ œ์–ด์ž, Type, ์ƒ์ˆ˜, static ๊ฐ™์€ ๋ณ€์ˆ˜ ๋“ฑ์ด ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ (๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ๊ณต์œ ๋จ)
  • Heap Area : ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•˜๋Š” Java Object๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๊ด€๋ฆฌ (๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉ)
  • Stack Area : ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ์ž„์‹œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ stack ๋ฉ”๋ชจ๋ฆฌ
  • Native method statck : ์ž๋ฐ” ์™ธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ (C/C++๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด)
  • PC Register : ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์˜ ์ฃผ์†Œ์™€ ๋ช…๋ น์„ ์ €์žฅํ•˜๋Š” ์˜์—ญ.

์“ฐ๋ ˆ๋“œ๋Š” Method Area์™€ Heap Area๋Š” ๊ณต์œ ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์˜์—ญ์€ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๊ฐ๊ฐ ์ƒ์„ฑ๋˜๊ณ  ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ๊ณผ์ •

  1. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ JVM์ด OS๋กœ ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. (๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น)
  2. ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค. (์ปดํŒŒ์ผ)
  3. ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ๋กœ๋”ฉํ•œ๋‹ค. (๋ฐ”์ดํŠธ์ฝ”๋“œ ๋กœ๋”ฉ)
  4. ๋กœ๋”ฉ๋œ ํด๋ž˜์Šค ํŒŒ์ผ์ด Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค. (๋ช…๋ น์–ด ์‹คํ–‰)
  5. ํ•ด์„๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ Runtime Data Areas์— ๋ฐฐ์น˜๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์ด ์ด๋ค„์ง„๋‹ค. (๋ฐ์ดํ„ฐ ์ ์žฌ)

 

Interpreter

Execution Engine์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ•œ ์ค„์”ฉ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

JIT(Just In Time)

์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ผ์ •ํ•œ ๊ธฐ์ค€์„ ๋„˜์–ด๊ฐ€๋ฉด ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค. ์ด ํ›„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•œ๋‹ค. 
JIT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JVM์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ฒดํฌํ•˜๊ณ  ์ผ์ •๊ธฐ์ค€์„ ๋„˜์–ด์„œ๋ฉด ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

Reference