๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/Java

์ž๋ฐ”์— ๋Œ€ํ•˜์—ฌ

<์ž๋ฐ”์˜ ์ •์„ 3ํŒ>์„ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • 1. ์ž๋ฐ”์–ธ์–ด์˜ ํŠน์ง•
  • 2. JVM
  • 2-1) JVM๊ตฌ์„ฑ
  • 2-2) JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ
  • 3. ์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰๊ณผ์ •

 

1. ์ž๋ฐ”์–ธ์–ด์˜ ํŠน์ง•

  • ์šด์˜์ฒด์ œ์— ๋…๋ฆฝ์ ์ด๊ณ , JVM์— ์ข…์†์ ์ด๋‹ค.   "write once, run anywhere"
  • ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์ด๋‹ค.
  • Garbage collection์ด ์ž๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.
  • ๋„คํŠธ์›Œํฌ์™€ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์ž์› : ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(JavaAPI)๋ฅผ ํ†ตํ•ด ๋น„๊ต์  ์งง์€ ์‹œ๊ฐ„์— ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์› : ์ผ๋ฐ˜์ ์ธ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์›์€ ์šด์˜์ฒด์ œ์— ๋”ฐ๋ผ ๊ตฌํ˜„๋ฐฉ๋ฒ•๊ณผ ์ฒ˜๋ฆฌ๋ฐฉ์‹์ด ์ƒ์ดํ•˜์ง€๋งŒ, ์ž๋ฐ”์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์— ์ƒ๊ด€์—†์ด ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๊ณ , JavaAPI๊ฐ€ ์ œ๊ณต๋˜์–ด ๊ตฌํ˜„์ด ์‰ฝ๋‹ค. ๋˜ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ์Šค์ผ€์ฅด๋ง์„ ์ž๋ฐ” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.
  • ๋™์  ๋กœ๋”ฉ ์ง€์› : ์‹คํ–‰์‹œ์— ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ์‹œ์ ์— ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. JVM(java virtual machine)

VM์€ ์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๊ธฐ๊ณ„๋กœ, ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

  • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ์ฝ์–ด ๋“ค์—ฌ ์ž๋ฐ” API์™€ ํ•จ๊ป˜ ์‹คํ–‰ํ•œ๋‹ค.
  • JAVA์™€ OS์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ JAVA๊ฐ€ OS์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ, Garbage collection์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์Šคํƒ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ๋จธ์‹ ์ด๋‹ค.
  • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JVM์„ ๋” ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

 

2-1) JVM๊ตฌ์„ฑ

  • Java Compiler : ์ž๋ฐ” ์†Œ์Šค(.java)์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• 
  • Class Loader : JVM๋‚ด๋กœ ํด๋ž˜์Šค(.classํŒŒ์ผ)๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ
  • Runtime Data Areas : JVM์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ ์œ„์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ํ• ๋‹น๋ฐ›๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
  • Native Method Interface(JNI) : JVM์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ์ค‘ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์ผ์ข…์˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • Native Method Libraries : ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค
  • Garbage Collection(GC) : Java Application์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ
  • Execution Engine(์‹คํ–‰ ์—”์ง„) : ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ JVM๋‚ด๋ถ€์—์„œ ๊ธฐ๊ณ„๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ(๊ธฐ๊ณ„์–ด)๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ชจ๋“ˆ

โ€ป ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ์‹

  • Interpreter : ๋ช…๋ น์–ด๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ ํ•œ์ค„์”ฉ ํ•ด์„ํ•ด์„œ ์‹คํ–‰ํ•ด ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.
  • JIT(Just-In-Time) compiler : ์ธํ„ฐํ”„๋ฆฌํ† ์˜ ๋‹จ์ (์„ฑ๋Šฅ, ์†๋„ ๋“ฑ)์„ ๋ณด์™„ํ•ด์„œ ๋„์ž…๋œ ๋ฐฉ์‹์œผ๋กœ, ์ ์ •ํ•œ ์‹œ๊ฐ„์— ์ „์ฒด ๋ฐ›์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

2-2) JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

  • Method Area : ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค์˜ ํด๋ž˜์Šค ํŒŒ์ผ(.class)์„ ๋ถ„์„ํ•˜์—ฌ ์ด๊ณณ์— ์ €์žฅ
  • Call Stack : ๋ฉ”์„œ๋“œ์˜ ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๊ณ  ๋ฉ”์„œ๋“œ๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๋ฉด ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋น„์›Œ์ง
  • Heap : ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๊ธฐ์— ์ƒ์„ฑ๋จ

 

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

โ‘  ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.

โ‘ก ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ(.java)๋ฅผ ์ฝ์–ด๋“ค์—ฌ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

โ‘ข Class Loader๋ฅผ ํ†ตํ•ด classํŒŒ์ผ๋“ค์„ JVM์œผ๋กœ ๋กœ๋”ฉํ•œ๋‹ค.

โ‘ฃ ๋กœ๋”ฉ๋œ classํŒŒ์ผ๋“ค์€ Execution engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.

โ‘ค ํ•ด์„๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” Runtime Data Areas์— ๋ฐฐ์น˜๋˜์–ด ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํ–‰๊ณผ์ • ์†์—์„œ JVM์€ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ GC๊ฐ™์€ ๊ด€๋ฆฌ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.