JVM

JDK, JRE, JVM

  • JDK, JRE, JVM์— ๋Œ€ํ•œ ์šฉ์–ด๋ฅผ ์ •๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • JDK : Java Development Kit / ์ž๋ฐ” ๊ฐœ๋ฐœ ๋„๊ตฌ

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

  • JVM : Java Virtual Machine / ์ž๋ฐ” ๊ฐ€์ƒ ๊ธฐ๊ณ„

Java์˜ ํ˜ธํ™˜์„ฑ

  • ์•ž Chapter์—์„œ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ•œ C์–ธ์–ด์™€ Java์˜ ์ฐจ์ด์ ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • Java๋Š” Write Once Use Anywhere ์ด๋ผ๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๋ฒˆ์—ญํ•˜์ž๋ฉด, "์†Œ์ŠคํŒŒ์ผ์„ ํ•˜๋‚˜๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์–ด๋””์—์„œ๋“ ์ง€ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!" ์ž…๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ฉด์— C์–ธ์–ด๋Š” One Source Multi Object Use Anywhere ๋ฒˆ์—ญํ•˜์ž๋ฉด, "ํ•˜๋‚˜์˜ ์†Œ์ŠคํŒŒ์ผ๋กœ ๊ฐ ๊ธฐ๊ณ„์— ๋งž๋Š” ๋ชฉ์ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์–ด๋””๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค!" ์ž…๋‹ˆ๋‹ค.

  • ์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด, ํ•˜๋‚˜์˜ ๋ชฉ์ ํŒŒ์ผ๋กœ ์–ด๋””๋“  ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋ƒ, ๋‹ค์ˆ˜์˜ ๋ชฉ์  ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ๊ฐ ๊ธฐ๊ณ„์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ƒ์˜ ์ฐจ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฒฐ๋ก , ์šฐ๋ฆฌ๋Š” Java๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๊ณ„์˜ ๊ธฐ์ข…๋ณ„ ์ฆ‰, ์šด์˜์ฒด์ œ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์„œ Java์˜ ๋ชฉ์ ํŒŒ์ผ์€ ๋ฐ˜๊ธฐ๊ณ„์–ด์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)์ธ๋ฐ ์ด๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์•„๋‹ˆ๋ผ JVM์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ ํ•ด์ฃผ๋Š”๊ฒŒ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac)์ž…๋‹ˆ๋‹ค.

  • ๊ทธ๋Ÿผ ๋‹ค์Œ์œผ๋กœ Java๊ฐ€ ์–ด๋–ค ๊ณผ์ •์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋˜์–ด ์‹คํ–‰๋˜๋Š”์ง€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Java์˜ ์‹คํ–‰ ๊ณผ์ •

  1. ๊ฐœ๋ฐœ์ž๋Š” ์ž๋ฐ” ์†Œ์ŠคํŒŒ์ผ(.java)๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. JDK๊ฐ€ ์ œ๊ณตํ•˜๋Š” javac๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์ŠคํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

  3. JVM์˜ Class Loader๋Š” ์ปดํŒŒ์ผ๋กœ ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class)๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„ ๋™์  ๋กœ๋”ฉ์„ ํ†ตํ•ด ์‹คํ–‰์— ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉํ•˜์—ฌ JVM ๋‚ด๋ถ€ Runtime Data Area์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  4. JVM์˜ Execution์— ์˜ํ•ด ๊ธฐ๊ณ„์–ด๋กœ ํ•ด์„๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Class Loader

  • ํ”„๋กœ๊ทธ๋žจ ์ƒ์˜ ์ž‘์„ฑํ•œ ๋ชจ๋“  ํด๋ž˜์Šค, ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ์˜ ์ •๋ณด๋ฅผ Method Area์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  • JVM ๋‚ด๋ถ€์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

  • ์‹คํ–‰๋  ๋•Œ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  jar ํŒŒ์ผ ๋‚ด๋ถ€์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ JVM์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  • static(์ •์ ) ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” Heap Area์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

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

  • Interpreter๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•œ์ค„ ์”ฉ ์ฝ๊ณ  ๋ฒˆ์—ญํ•ด ์ฃผ๋Š”๋ฐ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋ž˜์„œ ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด JIT ์ปดํŒŒ์ผ๋Ÿฌ์ž…๋‹ˆ๋‹ค.

  • JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Interpreter ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰์„ ํ•˜๋‹ค๊ฐ€ ์ ๋‹นํ•œ ์‹œ์ ์— ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ์บ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์บ์‹ฑ ์ฆ‰, ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ด ๋‘๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฝ”๋“œ๋“ค์€ Interpreter๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ”๋กœ ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋งค์šฐ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

  • Garbage Collector๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช… ํ•˜์ž๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฆ‰, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”์ ํ•˜์—ฌ ๋น„์›Œ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์™€ ์ปดํŒŒ์ผ ์–ธ์–ด์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๊ณ  ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

Compile ์–ธ์–ด์™€ Interpreter ์–ธ์–ด

Compile ์–ธ์–ด

  • ์†Œ์ŠคํŒŒ์ผ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผ ํ•œ ํ›„ ๊ธฐ๊ณ„์–ด๋ฅผ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฝ์–ด์„œ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์ด ๋˜๋Š” ์–ธ์–ด

  • ์ข…๋ฅ˜ : C, C++, Java, C# ...

  • ํŠน์ง•

    • ์†Œ์ŠคํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉด ์ปดํŒŒ์ผ ๊ณผ์ •์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ปดํŒŒ์ผ์ด ๋œ ํ›„์— ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค.

    • Java๋Š” javac์— ์˜ํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ ๋˜์ง€๋งŒ JVM์—์„œ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ Compile ์–ธ์–ด์ด์ง€๋งŒ, Interpreter ์–ธ์–ด์˜ ํŠน์ง•์„ ๋™์‹œ์— ๊ฐ€์ง‘๋‹ˆ๋‹ค.

Interpreter ์–ธ์–ด

  • ์†Œ์ŠคํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ ์„œ Interpreter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์ŠคํŒŒ์ผ์„ ํ•œ์ค„ ์”ฉ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์ด ๋˜๋Š” ์–ธ์–ด

    • Interpreter : ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ํ™˜๊ฒฝ

  • ์ข…๋ฅ˜ : Javascript, Ruby, Python ...

  • ํŠน์ง•

    • ์ปดํŒŒ์ผ ์–ธ์–ด์ฒ˜๋Ÿผ ๋ณ„๋„์˜ ๋ชฉ์ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์ปดํŒŒ์ผ ๊ณผ์ • ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ • ๋ฐ ๋””๋ฒ„๊น…์‹œ ํŽธํ•ฉ๋‹ˆ๋‹ค.

    • Interpreter ๋งŒ ์กด์žฌํ•˜๋ฉด ์–ด๋””์„œ๋“ ์ง€ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์œ ๋กญ๊ณ  ๋…๋ฆฝ์  ์ž…๋‹ˆ๋‹ค.

    • ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฒˆ์—ญ ๋˜๋ฉด์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

JVM

JVM์€ Java ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • ์œ„ ์ด๋ฏธ์ง€ ์ฒ˜๋Ÿผ JVM์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

  • ์šฐ๋ฆฌ๋Š” ์ด ์ค‘์—์„œ Runtime Data Areas๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.(Java 8 ์ดํ›„ ๊ธฐ์ค€)

์ „ ์ฒ˜๋ฆฌ ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ

  • Runtime Data Areas๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์ „์— ์ „ ์ฒ˜๋ฆฌ ๊ณผ์ •์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์œ„์—์„œ JRE๋Š” Java์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋ผ๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

  • JRE๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋จผ์ € ํ”„๋กœ๊ทธ๋žจ์— ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์กด์žฌํ•œ๋‹ค๋ฉด JVM์„ ๋ถ€ํŒ…์‹œํ‚ต๋‹ˆ๋‹ค.

  • ๋ถ€ํŒ…์ด๋œ JVM์€ ์ „๋‹ฌ๋ฐ›์€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋Š”๋ฐ ์ด๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ•˜๋Š” ์ผ์ด ์ „ ์ฒ˜๋ฆฌ๋ผ๊ณ  ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

์ „ ์ฒ˜๋ฆฌ ๊ณผ์ •

  1. ๋ชจ๋“  Java ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ˜๋“œ์‹œ java.lang ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ JRE๋Š” ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ Method Area์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด importํ•œ ํŒจํ‚ค์ง€๋“ค๋„ ์กด์žฌํ•  ๊ฒ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Method Area์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  3. ํ”„๋กœ๊ทธ๋žจ ์ƒ์˜ ์ž‘์„ฑํ•œ ๋ชจ๋“  ํด๋ž˜์Šค, ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ์˜ ์ •๋ณด๋ฅผ Method Area์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  4. static(์ •์ ) ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” Heap Area์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

Runtime Data Areas

  • ์ปดํ“จํ„ฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, ๋ฐ์ดํ„ฐ์˜ ์†์„ฑ์— ๋”ฐ๋ผ ์˜์—ญ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

PC Register

  • ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

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

Native Method Stack

  • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ ๋˜์–ด ์ƒ์„ฑ๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

  • ์ž๋ฐ” ์ด์™ธ์˜ ์–ธ์–ด(C, C++, ์–ด์…ˆ๋ธ”๋ฆฌ ๋“ฑ)๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, Native Method Stack์ด ํ• ๋‹น ๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์ธ C ์Šคํƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Java Native Interface๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์ฒ˜๋Ÿผ ์ปค๋„์ด ์Šคํƒ์„ ์žก์•„ ๋…์ž์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

Method Area(Metaspace, Static Area, Class Area)

  • ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์ฒ˜์Œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์˜ฌ๋ฆด ๋•Œ ์ดˆ๊ธฐํ™” ๋˜๋Š” ๋Œ€์ƒ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

  • ํด๋ž˜์Šค์˜ ํƒ€์ž…, ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋“  Thread๊ฐ€ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

  • Runtime Constant Pool

    • ์ƒ์ˆ˜ ์ž๋ฃŒํ˜•์„ ์ €์žฅํ•˜์—ฌ ์ฐธ์กฐํ•˜๊ณ  ์ค‘๋ณต์„ ๋ง‰๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Heap Area

  • ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์ค‘ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋“ค์€ ๋ชจ๋‘ ์ด๊ณณ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • Permanent Generation

    • ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์˜ ์ •๋ณด์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

    • ํด๋ž˜์Šค ๋กœ๋”์— ์˜ํ•ด ๋กœ๋“œ๋˜๋Š” Class, Method ๋“ฑ์— ๋Œ€ํ•œ Meta ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋ฉฐ JVM์— ์˜ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • Reflection์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • Java 8 ์ด์ „์—๋Š” Permanent Generation ์ด Heap ๋‚ด๋ถ€์— ์กด์žฌ ํ–ˆ์ง€๋งŒ 8 ์ดํ›„ ์ œ๊ฑฐ๋˜๊ณ  Method Area ์ฆ‰, Metaspace ๋ผ ๋ถˆ๋ฆฌ์šฐ๋ฉฐ Heap์ด ์•„๋‹Œ Native ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ œํ•œ๋œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ๋˜ ํ•œ๊ณ„์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • New/Young Generation

    • Eden : ๊ฐ์ฒด๋“ค์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

    • Survivor 0,1 : Eden์—์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

    • ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ์งง์€ ๊ฐ์ฒด๋ฅผ Garbage Collector ์˜ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

    • Eden ์˜์—ญ์— ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋“์ฐจ๊ฒŒ ๋˜๋ฉด Garbage Collector์— ์˜ํ•ด Eden ์˜์—ญ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ Survivor 1 ์˜์—ญ์— ๋ณต์‚ฌํ•˜๊ณ  ์ด ์˜์—ญ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ฐ์ฒด๋“ค์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

  • Tenured Generation

    • Old : ์ด๊ณณ์˜ ๊ฐ์ฒด๋“ค์€ Garbage Collector ์— ์˜ํ•ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

    • New/Young Generation ์—์„œ ์ผ์ •์‹œ๊ฐ„ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

    • ์ƒ๋ช… ์ฃผ๊ธฐ๊ฐ€ ๊ธด ๊ฐ์ฒด๋ฅผ Garbage Collector ์˜ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

Stack Area

  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ •์—์„œ ์ž„์‹œ๋กœ ํ• ๋‹น์ด ๋˜์—ˆ๋‹ค๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ๋ฐ”๋กœ ์†Œ๋ฉธ์ด ๋˜๋Š” ํŠน์„ฑ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค.

  • ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ ๋ฐ ์ค‘๊ด„ํ˜ธ ๋ธ”๋ก(if๋ฌธ๋“ฑ)์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

  • ๊ฐ€์žฅ ์ฒ˜์Œ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ(main())๊ฐ€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ทธ ๋‹ค์Œ์— ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด ์œ„์— ์Œ“์ด๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  • ์Œ“์ด๋Š” ๋ฉ”์„œ๋“œ์˜ ๋‹จ์œ„๋ฅผ ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ๋ฐ ๋ธ”๋ก์ด ์กด์žฌํ•˜๋ฉด ์Šคํƒ ํ”„๋ ˆ์ž„ ๋‚ด๋ถ€์— ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณ ์œ ์˜ ์Šคํƒ ์˜์—ญ์„ ๊ฐ€์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๋“œ๋””์–ด ๋‹ค์Œ Chapter ๋ถ€ํ„ฐ ๋ณธ๊ฒฉ์ ์œผ๋กœ Java์— ๋Œ€ํ•ด ํ•™์Šตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

ํ”„๋กœ์„ธ์Šค(process)๋ž€? ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰ ์ค‘์ธ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋“ฑ์˜ ์ž์›๊ณผ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ(thread)๋ž€?

ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์ฒด

  • 2๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค(multi-threaded process)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

Reflection ์ด๋ž€? ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•ด ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•

  • ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„, ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์—ญ์œผ๋กœ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ์•Œ์•„๋‚ด์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated