ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JVM์ด์•ผ๊ธฐ - ์ •์˜(+JRE, JDK), ๊ตฌ์กฐ
    ๊ฐœ๋ฐœ/Java 2022. 7. 5. 12:00

     

     

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


    ์ปดํ“จํ„ฐ๋Š” 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ(2์ง„์ˆ˜)๋กœ ์ž‘์„ฑ๋œ ๊ธฐ๊ณ„์–ด๋กœ๋งŒ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ์€ ๊ทธ ๊ธฐ๊ณ„์–ด๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. (๋ชจ๋‹ˆํ„ฐ์— 0110101010110 ์ด๋ ‡๊ฒŒ๋งŒ ์จ์žˆ์œผ๋ฉด, ๋‚œ๊ฐํ•˜๋‹ค^^;)

     

    ์–ด์จ‹๋“  ์šฐ๋ฆฌ๊ฐ€ ์ดํ•ดํ•˜๊ณ  ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…์„ ๋‹คํ–‰ํžˆ๋„ c๋‚˜ ์ž๋ฐ” ๊ฐ™์€ ์ปดํŒŒ์ผ ์–ธ์–ด์—์„œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๋Š” ๋ฒˆ์—ญ๊ฐ€๊ฐ€ ๋ฒˆ์—ญ์„ ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ c๊ฐ™์€ ๊ฒฝ์šฐ๋Š”, ๋˜‘๊ฐ™์ด c๋กœ ์ง  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋”๋ผ๋„ ์œˆ๋„์šฐ์—์„œ ๋Œ๊ฒŒ ์ปดํŒŒ์ผํ•œ ๊ฒƒ์€ ๋งฅ์ด๋‚˜ ๋ฆฌ๋ˆ…์Šค์—์„œ ์•ˆ๋ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์ด ๋„๋Š” ํ™˜๊ฒฝ, ์ปดํ“จํ„ฐ๋งˆ๋‹ค ๊ฑฐ๊ธฐ์— ๋งž๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ผ์ผ์ด ๋ฒˆ์—ญ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.

     

    ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒŒ ์ž๋ฐ”์˜ JVM์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๊ฐ ์ข…๋ฅ˜์˜ ์ปดํ“จํ„ฐ๋งˆ๋‹ค JVM์ด๋ผ๋Š” ์ „๋‹ด ํ†ต์—ญ์„ผํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋ฐ‘์—์„œ ๋‹ค์‹œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋Š” 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜๊ธฐ ์ „์— ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ํด๋ž˜์ŠคํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ๋˜๋Š”๋ฐ, ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ฐ ์ปดํ“จํ„ฐ์— ๊น”๋ ค์žˆ๋Š” JVM์—๊ฒŒ ๊ฐ–๋‹ค์ฃผ๋ฉด, ๊ทธ ์ปดํ“จํ„ฐ๊ฐ€ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ์ด JVM์ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ ๊ธฐ๊ณ„์–ด๋กœ ํ†ต์—ญ์„ ํ•ด์ค€๋‹ค. ๊ทธ๋ž˜์„œ Write Once Run Anywhere ์ด๋ผ๋Š” ๋ง์ด ๋‚˜์™”๋Š”๋ฐ, ํ•œ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋””์„œ๋“  ์ž‘๋™๋˜๋„๋ก ํ•ด์ค€๋‹ค๋Š” ๋œป์ด ๋ฐ”๋กœ ์ด๋Ÿฐ ์˜๋ฏธ์ด๋‹ค. 

     

     

    JRE (Java Runtime Environment) ์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ


    ๋Ÿฐํƒ€์ž„์ด๋ผ๋Š” ๋ง์€ ์ปดํŒŒ์ผํƒ€์ž„๊ณผ ๋Œ€์กฐ๋˜๋Š” ๋ง์ด๋‹ค. ์ปดํŒŒ์ผ์€ ์ฝ”๋”ฉ ์ดํ›„์— ์ด๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๊ธฐ ์ „์— '๋ฏธ๋ฆฌ' ํ•ด๋‘๋Š” ๋ฒˆ์—ญ์ž‘์—…์„ ๋งํ•˜๋Š”๋ฐ, ๊ฒฐ๊ตญ ์ปดํŒŒ์ผ ํƒ€์ž„์€ ์ด ์ž‘์—…์„ ํ•˜๋Š” ์‹œ์ ์„ ๋งํ•œ๋‹ค. ๋Ÿฐํƒ€์ž„์€ ๋ฐ˜๋Œ€๋กœ ์ด๊ฒƒ์„ run, ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์„ ๋งํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ž๋ฐ” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋ผ๋Š” ๋ง์ด ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์ž๋ฐ”๋กœ ์ง  ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ปดํŒŒ์ผ ๋ฐ ๋นŒ๋“œ๊นŒ์ง€ ๋‹ค ๋œ ๋‹ค์Œ ์ด๋ฅผ ์‚ฌ์šฉํ•  ๊ณณ์— ์ฃผ์–ด์ ธ์„œ ์‹คํ–‰์ด ๋  ๋•Œ ๊ทธ ํ™˜๊ฒฝ ์š”์†Œ๋“ค๋กœ์„œ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ๋งํ•œ๋‹ค. (์‹œ์Šคํ…œ์€ ์ฝ”๋“œ ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋ฐ”์˜ List, Map ๋“ฑ ์ด๋Ÿฐ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฒŒ, ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ด ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„ํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๊ฒƒ๋“ค์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค๋กœ ์ œ๊ณต์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.) JVM์—์„œ ๋„๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ JVM์ด๋ž‘ ์„ธํŠธ๋กœ ๋ฌถ์–ด๋‹ค๊ฐ€ ๋‹ค์šด๋ฐ›์•„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒƒ์ด JRE ์ด๋‹ค. ์ด JRE๋งŒ ๊น”๋ฉด ์–ด๋–ค ์ปดํ“จํ„ฐ๋“  ์ž๋ฐ”๋กœ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 

     

    ๊ทธ๋Ÿฐ๋ฐ ์š”์ฆ˜์—” JRE๊ฐ€ ์ž˜ ์•ˆ๋ณด์ธ๋‹ค. ์ด์œ ๋Š”? ๋ฐ”๋กœ JDK์— ์žˆ๋‹ค.

     

     

    JDK(Java Development Kit) ์ž๋ฐ”๊ฐœ๋ฐœ๋„๊ตฌ


    JDK๋Š” JRE๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. JRE ์—๋‹ค๊ฐ€ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ• ๋•Œ ์“ฐ๋Š” javac, ์ž๋ฐ”๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์“ฐ๋Š” jdb, ์„œ๋กœ ์—ฐ๊ด€ ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ ํ•˜๋‚˜์˜ jar ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” jar ๋“ฑ๋“ฑ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค๋„ ๊ฐ™์ด ํƒ‘์žฌ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค. 

     

    ์˜ˆ์ „์—๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆฌ๋ ค๋ฉด JRE๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์•ผํ–ˆ์ง€๋งŒ, ์š”์ฆ˜์—” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐฐํฌํ•˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์— JRE๋ž‘ JVM ์š”์†Œ๋“ค๊นŒ์ง€ ๋‹ค ๊ฐ™์ด ๋ผ์›Œ๋„ฃ์–ด์„œ ํ”„๋กœ๊ทธ๋žจ๋งŒ ๋ฐ›์•„์„œ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋˜๋„๋ก ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ” ๋Œ๋ฆฌ๋Š” ์„œ๋ฒ„๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ƒฅ ์•„์— JDK๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. 

     

     

    JVM ๊ตฌ์กฐ


    JVM ๊ตฌ์กฐ

     

    ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๋Š” .java ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๊ฒŒ ๋œ๋‹ค. ์ด ์†Œ์Šค ํŒŒ์ผ์€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ byte code๋กœ ์ด๋ฃจ์–ด์ง„ .class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•ด์ค€๋‹ค. 

    ์ด๋ ‡๊ฒŒ byte code๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋ฉด, ์ด๋Š” ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ 1์ฐจ์ ์œผ๋กœ ์ˆจ๊ธฐ๋Š” ์—ญํ• ์„ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ด์ œ byte code๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ ธ์œผ๋‹ˆ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋“ฑ์„ ํ•˜์ง€ ์•Š๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์€ ์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ์‹œ๋งˆ๋‹ค ์ปดํŒŒ์ผ์„ ํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ค๊ธฐ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

     

    ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์€ Class Loader์— ์˜ํ•ด JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ, ์ฆ‰ Runtime Data Area๋กœ ๋กœ๋”ฉ์‹œํ‚จ๋‹ค. Runtime Data Area๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 5๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์ ธ์žˆ๋‹ค.

     

    ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ธ Method Area, Heap์ด ์žˆ๊ณ , ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋˜๋Š” Stack, PC Register, Native Method Stack ์˜์—ญ์ด ์žˆ๋‹ค. 

     

    MethodArea ์˜์—ญ์€ JVM์ด ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์ด ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” ํด๋ž˜์Šค ์ •๋ณด, ๋ณ€์ˆ˜ ์ •๋ณด, static์œผ๋กœ ์„ ์–ธํ•œ ๊ณต์œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค.

     

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

     

    https://mong-dev.tistory.com/16
     

    Garbage Collector ์ด์•ผ๊ธฐ - ์ •์˜, ์™œ, ์–ธ์ œ, ์–ด๋–ป๊ฒŒ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ข…๋ฅ˜

    ์ข‹์€ ๊ฐœ๋ฐœ์ž๋Š” "๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ" ๋˜ํ•œ ์ž˜ ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Java๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ, ์ ˆ๋Œ€ ๋นผ๋จน์„ ์ˆ˜ ์—†๋Š” ๋‚ด์šฉ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ์ž…๋‹ˆ๋‹ค. JVM (Java Virtual Machine)์„ ๋จผ์ € ๊ณต๋ถ€ํ•˜๊ณ  ์˜ค๋ฉด ๋” ๋„

    mong-dev.tistory.com

     

    Stack ์˜์—ญ์€ ์ง€์—ญ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ž„์‹œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค. ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํŠน์„ฑ์ƒ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๋ฉด, ์ด ์•ˆ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋“ค์€ ์‚ฌ๋ผ์ง„๋‹ค. ์ฃผ๋กœ ๊ธˆ๋ฐฉ ์‚ฌ์šฉ๋˜๊ณ  ์‚ฌ์šฉ์ด ๋๋‚˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.

    ์ฐธ๊ณ ๋กœ, ์šฐ๋ฆฌ๊ฐ€ Person p = new Person("daramii", 30); ์„ ์ž…๋ ฅํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด๋ ‡๊ฒŒ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•œ Person ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜ p๋Š” stack์˜์—ญ์— ์ €์žฅ์ด ๋˜๊ณ , new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ์„ ์–ธํ•œ Person๊ฐ์ฒด ์ž์ฒด๋Š” Heap์˜์—ญ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

     

    PC Register๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ, ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ JVM์˜ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ์ฆ‰, ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ์–ด๋–ค ๋ช…๋ น์–ด๋กœ ์ˆ˜ํ–‰ํ• ์ง€ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

     

    Native Method Stack์€ JAVA๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋‹ค. ์ฆ‰, JNI(Java Native Interface)๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋Š” C/C++ ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋˜์–ด ์ƒ์„ฑ๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ด๋‹ค.

     

    ์ด์ œ Runtime Data Area์— ๋กœ๋”ฉ๋œ ํด๋ž˜์ŠคํŒŒ์ผ์ด Execution Engine์„ ํ†ตํ•ด ํ•ด์„์ด ๋œ๋‹ค.

     

    Execution Engine์€ ๋ง๊ทธ๋Œ€๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—”์ง„์ด๋‹ค. ์šฐ์„  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ• ์ˆ˜์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆผ์—์„œ ๋ณด์ด๋Š” interpreter๋Š” ๋ช…๋ น์–ด๋ฅผ ํ•œ์ค„ ํ•œ์ค„ ํ•ด์„ํ•˜๋ฉฐ ์‹คํ–‰ํ•œ๋‹ค. JIT(Just In Time) Compiler๋Š” interpreter์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, runtime ์‹œ์ ์— ํ•œ๊บผ๋ฒˆ์— ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. 

     

    ์ด์ œ ์ด๋ ‡๊ฒŒ ๊ธฐ๊ณ„์–ด๋กœ ํ•ด์„๋œ ๊ฒƒ๋“ค์ด Runtime Data Area์— ๋ฐฐ์น˜๋˜์–ด ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”๋‚˜ GC์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

     

    ๋งˆ์ง€๋ง‰์œผ๋กœ, Native Method Interface(JNI)๋Š” JVM์— ์˜ํ•ด ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ์ค‘ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœ ๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์ผ์ข…์˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

    Native Method Library๋Š” Native Method ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 

     

     

     

    ๋Œ“๊ธ€

Designed by Tistory.