๐Ÿ“™ Java

[Java] JVM(Java Virtual Machine)

ji_wonna 2022. 9. 19. 00:20

JVM์ด๋ž€?

JVM์€ ์ž๋ฐ”๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

JVM์€ ๊ฐ ์šด์˜์ฒด์ œ์— ์ ํ•ฉํ•˜๊ฒŒ ๊ฐœ๋ฐœ๋˜์–ด ์žˆ๊ณ  ์ž๋ฐ”๋Š” JVM์„ ๋งค๊ฐœ๋กœ ์šด์˜์ฒด์ œ์™€ ์†Œํ†ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์ด๋‹ค. (C++๊ณผ ์ฐจ์ด์ )

 

 

 

JVM ์ž‘๋™ ๊ณผ์ •

์ž๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ›„์— ์‹คํ–‰ํ•˜๋ฉด ๋จผ์ € ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์ปดํŒŒ์ผ์ด ์ง„ํ–‰๋œ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ .java ํŒŒ์ผ(์ž๋ฐ” ์ฝ”๋“œ ํŒŒ์ผ)์€ .class ํŒŒ์ผ(๋ฐ”์ดํŠธ ์ฝ”๋“œ ํŒŒ์ผ)๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

JVM์€ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆผ์—์„œ Runtime Data Area๊ฐ€ ์ด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๊ทธ ํ›„, ํด๋ž˜์Šค ๋กœ๋”(Class Loader)๊ฐ€ .class ํŒŒ์ผ์„ JVM์œผ๋กœ ๋ถˆ๋Ÿฌ๋“ค์—ฌ Runtime Data Area์— ๋กœ๋“œ์‹œํ‚จ๋‹ค.

๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์‹คํ–‰ ์—”์ง„(Execution Engine)์ด Runtime Data Area์— ์ €์žฅ๋œ .class ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.

์‹คํ–‰ ๋ฐฉ์‹์œผ๋กœ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)๋ฅผ ํ†ตํ•ด ํ•œ ์ค„์”ฉ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค.
  2. JIT Compiler(Just-In-Time Compiler)๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰์‹œํ‚จ๋‹ค.

์‹คํ–‰ ์—”์ง„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 1๋ฒˆ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๋‹ค๊ฐ€ ํŠน์ • ์ฝ”๋“œ๊ฐ€ ์ž์ฃผ ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ JIT Compiler๋ฅผ ํ†ตํ•ด ์‹คํ–‰์‹œํ‚จ๋‹ค.

 

 

 

 

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

 

 

Heap Area

JVM์ด ์ž‘๋™๋˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ๊ฐ์ฒด๋‚˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ๋ฐฐ์—ด์ด ์ €์žฅ๋œ๋‹ค.

Beer blanc = new Beer(); ์—์„œ new Beer() ๊ฐ€ ์‹คํ–‰๋˜๋ฉด Heap Area์— ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ƒ์„ฑ๋œ ์œ„์น˜์˜ ์ฃผ์†Œ ๊ฐ’์„ blanc์—๊ฒŒ ํ• ๋‹นํ•ด์ค€๋‹ค. ์ด blanc ์€ Stack Area์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ด๋‹ค.

์ฆ‰, ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ Stack Area์— ์žˆ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด Heap Area์˜ ์‹ค์ œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

Stack Area

๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ• ๋‹น๋˜๋Š” ์˜์—ญ์ด๋‹ค. Heap Area์— ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜ ๊ฐ’๊ณผ int, long, boolean ๋“ฑ์˜ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ด ์ €์žฅ๋œ๋‹ค. ๋ฉ”์„œ๋“œ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด pop๋˜์–ด ์‚ฌ๋ผ์ง„๋‹ค.

 

 

Method Area(Static Area, Class Area)

JVM์ด ์ž‘๋™๋˜๋ฉด ์ƒ์„ฑ๋˜๋ฉฐ ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ๊ณตํ†ต ์˜์—ญ์œผ๋กœ .class ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๊ณณ์ด๋‹ค. static ๋ณ€์ˆ˜์™€ ํด๋ž˜์Šค ์ •๋ณด, ๋ฉ”์„œ๋“œ ์ •๋ณด ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.

 

 

 

 

Garbage Collection

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์•„๋ฌด์—๊ฒŒ๋„ ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด๋‚˜ ๋ณ€์ˆ˜๋“ค์„ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์‚ญ์ œํ•˜๋ฉฐ ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์— ๋„์›€์„ ์ค€๋‹ค.

Heap Area๋Š” ๊ฐ์ฒด๊ฐ€ ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์กด์žฌํ•˜๋ƒ์— ๋”ฐ๋ผ  Young Area, Old Area๋กœ ๋‚˜๋ˆ„๊ฒŒ ๋œ๋‹ค.

 

Young Area์—์„œ๋Š” ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๋ฉฐ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ํ™œ๋™ํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ Minor GC๋ผ๊ณ  ํ•œ๋‹ค.

 

Old Area์—์„œ๋Š” Young Area์—์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ๋ณต์‚ฌ๋˜๊ณ  ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ํ• ๋‹น๋œ๋‹ค. ํฌ๊ธฐ๊ฐ€ ํด์ˆ˜๋ก ๊ฐ€๋น„์ง€ ๋ฐœ์ƒ๋ฅ ์€ ์ ๋‹ค. ์—ฌ๊ธฐ์„œ ํ™œ๋™ํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ Major GC๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

๋™์ž‘ ๋ฐฉ์‹

Young Area์™€ Old Area์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ์ฐจ์ด๊ฐ€ ์žˆ์–ด์„œ ์„ธ๋ถ€์ ์ธ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค๋ฅด์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค.

 

1. Stop The World

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ์ž‘์—…์ด๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜๊ณ  ์ •๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์žฌ๊ฐœ๋œ๋‹ค.

 

2. Mark and Sweep

Mark๋Š” ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์ž‘์—…์ด๋ฉฐ, Sweep์€ Mark์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ๊ตฌ๋ณ„๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ž‘์—…์ด๋‹ค.