๐Ÿ› ๏ธBackend/โ˜•Java

[Java] JVM ๋™์ž‘ ์›๋ฆฌ

junbin2 2024. 10. 23. 05:07

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

 

JVM(Java Virtual Machine) ๋™์ž‘ ์›๋ฆฌ

JVM์€ "java ClassName" ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ClassName์€ ๋ฐ˜๋“œ์‹œ main ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์ฃผ ํด๋ž˜์Šค์—ฌ์•ผ ํ•œ๋‹ค. JVM์ด ์‹คํ–‰์ด ๋œ ํ›„ JVM์˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํ•„์š”ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ์ธ java.lang ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ๋จผ์ € ๋กœ๋“œ ํ•ด์ค€๋‹ค. ์ดํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ main ๋ฉ”์„œ๋“œ ์ฃผ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œ๋ฅผ ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ๋‹ค ๋๋‚˜๋ฉด, JVM์€ main ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

 

JVM ๋™์ž‘ ์ˆœ์„œ

1. JVM ์‹คํ–‰

2. JVM ์šด์˜์ฒด์ œ๋กœ ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ( Heap , Stack , Method Area )

3. (๋กœ๋“œ ๊ณผ์ •) JVM ์•ˆ์˜ ํด๋ž˜์Šค ๋กœ๋” MyProject ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

-> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ main ์ฃผ ํด๋ž˜์Šค MyProject๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•จ.

4. JVM์˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

-> java.lang.Object , java.lang.String, java.lang.System ๋“ฑ langํŒจํ‚ค์ง€ -> ํ•„์ˆ˜์  ๋กœ๋“œ ๊ธฐ๋ณธ ํด๋ž˜์Šค

-> ์ฃผ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” static ์ดˆ๊ธฐํ™” ๋ธ”๋ก ๋ฐ static ํ•„๋“œ

5. main ๋ฉ”์„œ๋“œ ์‹คํ–‰

-> main ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰ ๋˜๊ณ , JVM์€ ํ•ด๋‹น ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ํ•ด์„ํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.์ด ๋ณ€ํ™˜ ๊ณผ์ •์€ JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

-> ๋ณ€ํ™˜ ๋œ ๊ธฐ๊ณ„์–ด๋Š” ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด CPU์—๊ฒŒ ์ „๋‹ฌ์ด ๋˜๊ณ , CPU๊ฐ€ ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

-> CPU๋Š” ์šด์˜์ฒด์ œ ์ง€์‹œ๋ฅผ ๋ฐ›๊ณ  ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ๋กœ์ง์— ๋”ฐ๋ผ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

6. ์—ฐ๊ด€๋œ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ import ํŒจํ‚ค์ง€ ์ฃผ์†Œ๊ฐ’ ์ฐธ์กฐํ•ด์„œ JVM ํด๋ž˜์Šค ๋กœ๋” ํ•ด๋‹น ํด๋ž˜์Šค ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ

-> ํ•ด๋‹น ํด๋ž˜์Šค ๋กœ๋”๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค ๋กœ๋” ์ด๋‹ค.

-> ( ํ•œ ๋ฒˆ ๋กœ๋“œ๋œ ํด๋ž˜์Šค๋Š” JVM์˜ Method Area์— ์ €์žฅ์ด ๋œ๋‹ค. ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€ )

-> ์ด ํ›„ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ Method Area์—์„œ ๊ฐ€์ ธ์™€ Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๊ฐ์ฒด ์ƒ์„ฑ

7. ์†Œ์Šค ์ฝ”๋“œ ์ „๋ถ€ ์‹คํ–‰ ํ›„ main ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ๋ฐ JVM ๋ฉ”๋ชจ๋ฆฌ ์šด์˜์ฒด์ œ์— ๋ฐ˜๋‚ฉ

 

 

Heap / Stack / Method Area ์˜์—ญ์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ๊ธฐ์•ฝํ•˜๋ฉฐ...

JIT ์ปดํŒŒ์ผ๋Ÿฌ์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ๊ธฐ์•ฝํ•˜๋ฉฐ...

JVM๊ณผ ์šด์˜์ฒด์ œ ๋ฐ CPU ์ƒํ˜ธ ์ž‘์šฉ์€ ๋‹ค์Œ์„ ๊ธฐ์•ฝํ•˜๋ฉฐ...

 

 

๋งŒ์•ฝ JVM์— ๋Œ€ํ•ด์„œ ๋ชจ๋“ ๊ฑธ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ...

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

 

The Java® Virtual Machine Specification

Tim Lindholm Frank Yellin Gilad Bracha Alex Buckley

docs.oracle.com