๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ์ด์•ผ๊ธฐ/JAVA

Java - ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ

by 0_0๐Ÿ–ค 2023. 6. 28.
๋ฐ˜์‘ํ˜•

 

์‹คํ–‰ ๊ณผ์ •

 

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ๋ณด๋‹ค ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด๋ผ๋Š” ํ•œ ๋‹จ๊ณ„๋ฅผ ๋” ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ์‹คํ–‰ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

 

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ (Java compiler)

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋ฐ”๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์„ฑํ•œ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ์ฝ”๋“œ)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋ฐ”๋ฅผ ์„ค์น˜ํ•˜๋ฉด javac.exe ์‹คํ–‰ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์„ค์น˜๋œ๋‹ค.

 

- JIT์ปดํŒŒ์ผ(Just In Time) : ์‹คํ–‰ํ™˜๊ฒฝ์— ๋งž๋Š” JVM์„ ์„ค์น˜ํ•˜๋ฉด ์šด์˜์ฒด์ œ ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ปดํŒŒ์ผ ์‹œ์ ์— ๋งž์ถฐ์„œ ๋ฒˆ์—ญ

 

 

 

์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ (Java bytecode)

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์˜๋ฏธ.

์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋˜๋Š” ์ฝ”๋“œ์˜ ๋ช…๋ น์–ด ํฌ๊ธฐ๊ฐ€ 1๋ฐ”์ดํŠธ๋ผ ๋ถ™์—ฌ์ง„ ๋ช…์นญ์œผ๋กœ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ์˜ ํ™•์žฅ์ž๋Š” .class์ด๋‹ค. ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ๋งŒ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ์–ด๋–ค ์šด์˜์ฒด์ œ์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  (java Virtual Machine, JVM)

์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ์˜ ๊ธฐ๊ณ„.

์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์˜ค๋ผํด์€ ๋Œ€๋ถ€๋ถ„์˜ ์ฃผ์š” ์šด์˜์ฒด์ œ ๋ฟ ์•„๋‹ˆ๋ผ ์›น ๋ธŒ๋ผ์šฐ์ €, ์Šค๋งˆํŠธ ํฐ, ๊ฐ€์ „๊ธฐ๊ธฐ ๋“ฑ์—์„œ๋„ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์†์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

๋‹จ, JVM์€ ์šด์˜์ฒด์ œ์— ์ข…์†์ ์ด๋ฏ€๋กœ ๊ฐ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  JVM ๊ตฌ์„ฑ

1. ์ž๋ฐ” ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter) : ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋œ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ํ•ด์„

2. ํด๋ž˜์Šค ๋กœ๋”(class loader) : ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•ด์ฃผ๋Š” ์—ญํ• 

3. JIT ์ปดํŒŒ์ผ๋Ÿฌ(Just-In-Time compiler) : ์‹คํ–‰์ค‘์ธ ๋Ÿฐํƒ€์ž„์— ์‹ค์ œ ๊ธฐ๊ณ„์–ด(์›์‹œ ์‹œ์Šคํ…œ ์ฝ”๋“œ)๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ

    ๋™์  ๋ฒˆ์—ญ(dynamic translation)์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ.

4. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(garbage collector) : ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ฒŒ ํ•จ.

 

 

 

์ž๋ฐ” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ (Java Runtime Environment, JRE)

๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค๊ฐ„์— ์™„๋ฒฝํ•œ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›.

- ๋Ÿฐํƒ€์ž„(Runtime) : ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ 

 

์ฐธ๊ณ  - 2023.06.27 - [sw ๊ฐœ๋ฐœ ๊ฐœ์š”] - ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•

 

 

 

 

๋ฐ˜์‘ํ˜•