MapleStory Finger Point

๐ŸŸค JAVA/๐ŸŸค JAVA ๊ฐœ๋…์ •๋ฆฌ

[JAVA] ์ปดํŒŒ์ผ / ๋Ÿฐํƒ€์ž„ / JVM ๊ตฌ์กฐ

HYEJU01 2024. 12. 11. 19:33

์ปดํŒŒ์ผ (Compile)

์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ • (์ปดํŒŒ์ผ๋Ÿฌ javac๊ฐ€ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜)

`.java` -> `.class` 

 

๋Ÿฐํƒ€์ž„ (Runtime)

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

์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ JVM ์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์‹œ์ 

 

 

์ปดํŒŒ์ผ๊ณผ ๋Ÿฐํƒ€์ž„์˜ ์ฐจ์ด์ 

์‹œ์  ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „์—, ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฐœ์ƒ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒ
๋ชฉ์  ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ณ , ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ๋™์  ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌ
์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜, ํƒ€์ž… ์˜ค๋ฅ˜, ์ฒดํฌ ์˜ˆ์™ธ ๋ฏธ์ฒ˜๋ฆฌ ๋“ฑ (์ปดํŒŒ์ผ ์‹œ ๋ฐœ์ƒ) ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ(๋ฐฐ์—ด ์ธ๋ฑ์Šค ์ดˆ๊ณผ, null ์ฐธ์กฐ ๋“ฑ) (์‹คํ–‰ ์‹œ ๋ฐœ์ƒ)
์˜ˆ์‹œ ์˜ค๋ฅ˜ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜, ํƒ€์ž… ์˜ค๋ฅ˜, ์ฒดํฌ ์˜ˆ์™ธ ๋ฏธ์ฒ˜๋ฆฌ NullPointerException, ArrayIndexOutOfBoundsException ๋“ฑ
์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•์ œ ์—ฌ๋ถ€ ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ (try-catch ๋˜๋Š” throws) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๊ฐ€ ๊ฐ•์ œ๋˜์ง€ ์•Š์Œ (์–ธ์ฒดํฌ ์˜ˆ์™ธ)

 

 

JVM(Java Virtual Machine) ๊ตฌ์กฐ

 

ํด๋ž˜์Šค ๋กœ๋”(Class Loader)๊ฐ€ ์ปดํŒŒ์ผ๋œ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ(Runtime Data Areas)์— ๋กœ๋“œํ•˜๊ณ 

์‹คํ–‰ ์—”์ง„(Execution Engine)์ด ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

 

 

JVM ์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ

(1) Class Loader (ํด๋ž˜์Šค ๋กœ๋”)

์ปดํŒŒ์ผํƒ€์ž„์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ์œผ๋กœ ์ฐธ์กฐํ•  ๋–„ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋งํฌํ•œ๋‹ค. (= ๋™์ ๋กœ๋“œ) 

๋™์  ๋กœ๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

 

* ๋™์ ๋กœ๋“œ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘ (๋Ÿฐํƒ€์ž„)์— ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ฆฌ์†Œ์Šค ๋“ฑ์„ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ

(์ •์ ๋กœ๋“œ๋Š” ์ปดํŒŒ์ผ ํ•  ๋•Œ ๋กœ๋“œ๋จ)

 

 

 

(2) Runtime Data Area (๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ) 

JVM ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ ์œ„ํ•ด์„œ ์‹คํ–‰๋˜๋ฉด์„œ ํ• ๋‹น ๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

6๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ

 

 

 

 

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

 ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด JVM ๋‚ด ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ

๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค ( CPU ๋™์ž‘๊ณผ ์œ ์‚ฌ )

 

* ์ธํ„ฐํ”„๋ฆฌํ„ฐ

๋ฐ”์ดํŠธ ์ฝ”๋“œ ์–ธ์–ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ํ•˜๋‚˜์˜ ํ•ด์„์€ ๋น ๋ฅด์ง€๋งŒ ๊ฒฐ๊ณผ๊นŒ์ง€์˜ ์‹คํ–‰์€ ๋Š๋ฆฌ๋‹ค. 

 

* JIT (Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ

๋Ÿฐํƒ€์ž„ ์‹œ์  / ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‹จ์ ์„ ๋ณด์™„, ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ ํ›„ ์ ์ ˆํ•œ ์‹œ์ ์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผ ํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝ ํ›„ ๋”์ด์ƒ ์ธํ„ฐํ”„๋ฆฌ์ง• ์—†์ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹

(๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ์บ์‹œ์— ๋ณด๊ด€๋˜์–ด์„œ, ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ๋Š” ๊ณ„์† ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ๋จ

JIT ์ปดํŒŒ์ผ ๋ฐฉ์‹์€ ์ธํ„ฐํ”„๋ฆฌํŒ…๋ณด๋‹ค ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ํ•œ๋ฒˆ ์‹คํ–‰์„ ์œ„ํ•œ ์ฝ”๋“œ์ด๋ฉด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ํšจ์œจ์ ์ด๋‹ค.

JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JVM ์€ ๋ฉ”์„œ๋“œ์˜ ์ˆ˜ํ–‰ ์ •๋„๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ผ์ • ์ •๋„๊ฐ€ ๋„˜์„ ๋•Œ์—๋งŒ ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. )

(JAVA , .NET Framework, JavaScript ์—์„œ ์‚ฌ์šฉ๋จ)

 

(+) ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ๋Ÿฌ

์ปดํŒŒ์ผ(๋นŒ๋“œ) ์‹œ์  / ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•จ, ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์—†์ด ๋‹ค์ด๋ ‰ํŠธ๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๋ฅผ ๊ทน๋Œ€ํ™” ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ”Œ๋žซํผ์— ์ข…์†์ ์ด๋‹ค. ํŠน์ • ์šด์˜์ฒด์ œ์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•จ

( C, C++, Rust , Go ์—์„œ ์‚ฌ์šฉ๋จ)

 

 

 

 

(4) Garbage Collector

 

  • Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค ์ค‘ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• ์„ ํ•จ.
  • GC์˜ ๋ฐœ์ƒ์€ ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š์•„์„œ ์–ธ์ œ ๊ฐ์ฒด๋ฅผ ์ •๋ฆฌํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. 
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ๋งค๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ํ•  ์ˆ˜ ์—†์Œ

 

1. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€ : ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ์ €ํ•˜, ๋น„์ •์ƒ ์ข…๋ฃŒ ๋“ฑ ๋ฐฉ์ง€

2. ์•ˆ์ „์„ฑ ์ฆ๊ฐ€ : ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐ ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๋ฐฉ์ง€.

3. ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ  : ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ฝ”๋“œ ์ž‘์„ฑ ๋ถˆํ•„์š”.

 

 

 

 

https://d2.naver.com/helloworld/1230

https://blog.naver.com/rokey_89/221658053244

https://f-lab.kr/insight/java-compilation-process-jvm-20240806

https://err0rcode7.github.io/java/2021/05/16/JVM%EA%B3%BC%EC%9E%90%EB%B0%94%EC%9D%98%EC%8B%A4%ED%96%89.html