IT/development

[Java] Java ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •(feat. TCPSchool)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2022. 11. 23.

๋ชฉ์ฐจ

    Java์˜ ์‹คํ–‰๊ณผ์ •(feat. TCPSchool)๐Ÿ˜„

    java ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ •

     

    Java ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰๊ณผ์ •์„ ๊ธฐ๋กํ•œ๋‹ค. 

    ๋ฌผ๋ก  ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋” ๋ณต์žกํ•˜์ง€๋งŒ ์ •๋ง ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณธ๋‹ค.


    ์ปดํŒŒ์ผ ํƒ€์ž„ ํ™˜๊ฒฝ๐Ÿ˜Ž

    ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋”ฉํ•œ ์ž๋ฐ”์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ ์‹œ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

    ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ(.java)

    ์ž๋ฐ” ์†Œ์Šค

     

    ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ

    ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋ฐ” ์„ค์น˜ ์‹œ javac.exe๋ผ๋Š” ์‹คํ–‰ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์„ค์น˜๋จ

    ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ

     

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

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

    ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋˜๋Š” ์ฝ”๋“œ์˜ ๋ช…๋ น์–ด ํฌ๊ธฐ๊ฐ€ 1๋ฐ”์ดํŠธ๋ผ์„œ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

    ํ™•์žฅ์ž๋Š” .class์ด๊ณ  JVM์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ณณ ์–ด๋””์„œ๋“  ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” target > classes > ํ”„๋กœ์ ํŠธ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋œ๋‹ค.

    ์•„๋ž˜๋Š” ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์˜ˆ์‹œ์ด๋‹ค.

    ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ


    ๋Ÿฐํƒ€์ž„(์‹คํ–‰) ํ™˜๊ฒฝ๐Ÿ™‚

    JVM(Java Virtual Machine)

    java JVM

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

    ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์ด JVM ์œ„์—์„œ ์ž‘๋™๋˜๊ธฐ์— JVM์ด ๋ฐ˜๋“œ์‹œ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ฌ๋ผ๋„ ๊ฐ™์€ JVM์ด ์„ค์น˜ ๋˜์–ด ์žˆ๋‹ค๋ฉด ์•„๋ฌด๋Ÿฐ ์ถ”๊ฐ€ ์กฐ์น˜ ์—†์ด ๋™์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ํ•œ ๋ฒˆ๋งŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ฉด, ๋ชจ๋“  ์šด์˜์ฒด์ œ์—์„œ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ 

    ์ด๋ฅผ ๋‘๊ณ  ์šด์˜์ฒด์— ๋…๋ฆฝ์ ์ด๋ผ๊ณ  ์–˜๊ธฐํ•œ๋‹ค.

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

    ex) ์œˆ๋„์šฐ ์šด์˜์ฒด์ œ ์šฉ JVM์„ ๋ฆฌ๋ˆ…์Šค์— ์„ค์น˜ํ•˜๋ฉด ์•ˆ๋จ

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

     

    JVM์˜ ๊ตฌ์„ฑ

    1. ์ž๋ฐ” ์ธํ„ฐํ”„๋ฆฌํ„ฐ(interpreter)

    ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋œ ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋ฅผ ์ฝ๊ณ  ํ•ด์„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

    2. ํด๋ž˜์Šค ๋กœ๋”(class loader)

    ์ž๋ฐ”๋Š” ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ฝ์–ด์˜ค๋ฏ€๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ธ ๋Ÿฐํƒ€์ž„์—์„œ์•ผ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ JVM๊ณผ ์—ฐ๊ฒฐ๋จ

    ์ด๋ ‡๊ฒŒ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ํด๋ž˜์Šค ๋กœ๋”์ด๋‹ค.

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

    JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ž€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ธ ๋Ÿฐํƒ€์ž„์— ์‹ค์ œ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์˜๋ฏธํ•จ

    ๋™์  ๋ฒˆ์—ญ(dynamic translation)์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ด ๊ธฐ๋ฒ•์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์Œ, ์ฆ‰ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋ฐ”๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•จ

    4. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(garbage collector)

    JVM์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ

    ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ, ๋”์šฑ ์†์‰ฝ๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ

     

    ์ฐธ์กฐ : tcpschool, http://www.tcpschool.com/java/java_intro_programming

    ๋Œ“๊ธ€