๊ด€๋ฆฌ ๋ฉ”๋‰ด

GO SIWOO!

[Java] JVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€ & Java ์ปดํŒŒ์ผ & JVM ๋‚ด๋ถ€ ๊ตฌ์กฐ ๋ณธ๋ฌธ

Develop/์ž๋ฐ”(Java)

[Java] JVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€ & Java ์ปดํŒŒ์ผ & JVM ๋‚ด๋ถ€ ๊ตฌ์กฐ

gosiwoo 2023. 2. 23. 16:05

๐Ÿ“ŒJVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ”Œ๋žซํผ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ–ˆ๋‹ค. ์˜ˆ๋กœ ์œˆ๋„์šฐ์—์„œ ์ปดํŒŒ์ผ ํ•œ ์‹คํ–‰ํŒŒ์ผ์„ ๋ฆฌ๋ˆ…์Šค์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์‹คํ–‰์ด ๋˜์ง€ ์•Š๊ณ  ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์„ ํ•ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค.

 

Java๋Š” JVM์œผ๋กœ ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

JVM์€ Java Virtual Machine์„ ์ค„์ธ ๊ฒƒ์œผ๋กœ ์ง์—ญํ•˜๋ฉด '์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๋จธ์‹  ๊ธฐ๊ณ„(์ปดํ“จํ„ฐ)'์ด๋‹ค. JVM์„ ํ†ตํ•ด์„œ Java ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์€ OS์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

 

 

 

๐Ÿ“ŒJava ์ปดํŒŒ์ผ ์ˆœ์„œ

Java ์ปดํŒŒ์ผ ๊ณผ์ •

1. ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ(.java) ์ž‘์„ฑ
2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac.exe)๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ(.java)๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋กœ ์ปดํŒŒ์ผ
3. ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋ฅผ JVM์˜ ํด๋ž˜์Šค ๋กœ๋”(Class Loader)์—๊ฒŒ ์ „๋‹ฌ
4. ํด๋ž˜์Šค ๋กœ๋”(Class Loader)๋Š” ๋™์ ๋กœ๋”ฉ์„ ํ†ตํ•ด JVM์˜ ๋ฉ”๋ชจ๋ฆฌ(Runtime Data Areas)์— ์˜ฌ๋ฆฐ๋‹ค
5. ์‹คํ–‰ ์—”์ง„(Execution Engine)์ด JVM ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋“ค์„ ์‹คํ–‰

 

์‹คํ–‰ ์—”์ง„(Execution Engine)

JVM์˜ ๋ฉ”๋ชจ๋ฆฌ(Runtime Data Areas)์— ์˜ฌ๋ผ๊ฐ„ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ (Interpreter) ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰, ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋А๋ฆฐ ๋‹จ์ 
2. JIT (Just In Time) ์ปดํŒŒ์ผ๋Ÿฌ : ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝ ํ›„ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰

 

 

๐Ÿ“ŒJVM ๋‚ด๋ถ€ ๊ตฌ์กฐ

JVM ๋‚ด๋ถ€ ๊ตฌ์กฐ

Java ์ปดํŒŒ์ผ ์ˆœ์„œ์—์„œ ์„ค๋ช…ํ•œ ๋ฐ”์™€ ๊ฐ™์ด JVM์˜ ๋ฉ”๋ชจ๋ฆฌ, ์ฆ‰ Runtime Data Areas์— ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์žˆ๋‹ค.

 

Runtime data areas

๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ 
Method Area :
ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋ฉด, ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ํŒŒ์‹ฑ ํ›„ Method Area์— ์ €์žฅ
Heap : ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉฐ ์ƒ์„ฑํ•œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ Heap์— ์ €์žฅ

์Šค๋ ˆ๋“œ๋งˆ๋‹ค ์กด์žฌ
Java stacks : ์Šค๋ ˆ๋“œ ๋ณ„๋กœ 1๊ฐœ๋งŒ ์กด์žฌํ•˜๊ณ , ์Šคํƒ ํ”„๋ ˆ์ž„์ด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋งˆ๋‹ค ์ƒ์„ฑ, ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๋ฉด pop์œผ๋กœ ์ œ๊ฑฐ
PC Registers : ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ณ , pc๋Š” ๊ทธ ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ๋ช‡ ๋ฒˆ์งธ ์ค„์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋‚˜ํƒ€๋ƒ„
Native method stacks : Java Bytecode๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ด๊น€