jvm

JVM

Java Virtual Machine์˜ ์•ฝ์ž๋กœ Java์™€ OS์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, GC(garbage collection)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šคํƒ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ๋จธ์‹ ์œผ๋กœ C++,C์™€ ๊ฐ™์€ ์–ธ์–ด๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ OS์— ์ƒ๊ด€์—†์ด ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Java๋Š” C๋‚˜ C++๊ณผ ๊ฐ™์ด ๋ฐ”๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ์–ธ์–ด๋Š” ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ปดํŒŒ์ผ์ด ๋œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Java์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ธ os์™€ ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๋‹ค๋Š” ์ ์„ ์œ„๋ฐ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (ํŒŒ์ด์ฌ์ด๋‚˜, JS๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด)

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ถ„์„ํ•˜์—ฌ ์˜ค๋ฅ˜๊ฐ€์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ๋Š” ๋ฐ˜๋ฉด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ•œ ํ–‰์”ฉ ์‹คํ–‰ํ•˜๋ฉฐ ๋ถ„์„์„ํ•˜๊ณ (์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜) ์ค‘๊ฐ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ์‹œ ๊ทธ ์ดํ›„์˜ ์ฝ”๋“œ๋Š” ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

Java๋Š” ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•๋•Œ๋ฌธ์— ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.classํŒŒ์ผ)๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์ด๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ธ๋ฐ ๊ธฐ๊ณ„์–ด๊ฐ€ ์•„๋‹Œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด์œ ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” JVM์„ ์œ„ํ•œ ์–ธ์–ด์ด๊ณ  JVM๋„ ๊ธฐ๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ž๋ฐ” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์˜ JVM์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์žฅ์ ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ค‘๊ฐ„์–ธ์–ด๋กœ ๋ณ€ํ™˜ ํ›„ ์ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•œ๋‹ค.

์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ปดํŒŒ์ผ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•ด ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ(.classํŒŒ์ผ)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์„ค์น˜ํ•œ jdk์˜ binํด๋”์•ˆ์— javac์ด๋ผ๋Š” ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

javac hello.world.java

์ปดํŒŒ์ผ ๊ณผ์ •

  1. ์–ดํœ˜ ๋ถ„์„ : public, class, operator(์—ฐ์‚ฐ์ž,๊ด„ํ˜ธ๋“ฑ), ๋ฆฌํ„ฐ๋Ÿด(์ƒ์ˆ˜), ๋“ฑ์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ๋‚˜๋ˆˆ๊ฒƒ์„ ์–ดํœ˜์†Œ๋ผ๊ณ  ํ•˜๋ฉฐ ์ด ์–ดํœ˜์†Œ๋“ค์„ ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ(ํ† ํฐ ์ŠคํŠธ๋ฆผ)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •

  2. ๊ตฌ๋ฌธ ๋ถ„์„ : ํ† ํฐ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ๋ฌธ๋ฒ•์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ‹€๋ ธ๋‹ค๋ฉด Syntax error๋ฅผ ๋„์šด๋‹ค.

  3. ์˜๋ฏธ ๋ถ„์„ : ํƒ€์ž…๊ฒ€์‚ฌ๋‚˜ ์ž๋™ ํƒ€์ž… ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฒ€์‚ฌํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ๋„์šด๋‹ค.

  4. ์ค‘๊ฐ„ ์ฝ”๋“œ(๋ฐ”์ดํŠธ ์ฝ”๋“œ) ์ƒ์„ฑ

์‹คํ–‰๋ฐฉ๋ฒ•

๋Œ€๋ถ€๋ถ„์€ IDE๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•˜๋‚˜ CLI์˜ java๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰์ด๊ฐ€๋Šฅํ•˜๋‹ค.

default ํŒจํ‚ค์ง€๋ผ๋ฉด ๋ฐ”๋กœ ํŒŒ์ผ๋ช…์„ ํ†ตํ•ด ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ package๋ฅผ ๋ช…์‹œํ•˜์—ฌ ์‹คํ–‰๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

java hello_world

java java.me.example.hello_world

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

์œ„์—์„œ ์„ค๋ช…๊ฒƒ ์ฒ˜๋Ÿผ JVM์ด๋ผ๋Š” ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ด๋‹ค.

๋•Œ๋ฌธ์— ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

JVM ๊ตฌ์„ฑ์š”์†Œ

  • Class Loader : ๋ฐ”์ดํŠธ ์ฝ”๋“œ(.class ํŒŒ์ผ)๋ฅผ JVM๋‚ด๋กœ ๋กœ๋”ฉํ•˜๊ณ  ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰

    ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋•Œ ํด๋ž˜์Šค๋ฅผ ์ฒ˜์Œ ์ฐธ์กฐํ•œ๋‹ค.

    ๋กœ๋”ฉ์‹œ์— ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜์—†๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • Execution Engine : ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋Š” ์—ญํ• ๋กœ JVM์„ ์œ„ํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰

    • Interpreter : ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•˜๊ณ  ํ•œ ์ค„์”ฉ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋ง์ด ๋‚˜์˜จ๋‹ค.

    • JIT (Just In Time) : ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ์–ด ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹

      ๊ธฐ๊ณ„์–ด๋Š” ์บ์‹œ์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‚˜ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ผ๋ฉด ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— JIT์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JVM๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฉ”์„œ๋“œ์˜ ๋นˆ๋„๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ •๋„๋ฅผ ๋„˜์—ˆ์„ ๊ฒฝ์šฐ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ์Šค์ผ€์ค„๋งํ•œ๋‹ค.

    • Garbage Collector : ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” garbage Collection์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

Runtime Data Area

JVM๋‚ด์˜ ๋ฉ”๋ชจ๋ฆฌ

  • PC Register : ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ์–ด๋–ค ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ• ์ง€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ๋ฉ”์„œ๋“œ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ ์•„๋‹ˆ๋ฉด JVM๋ช…๋ น์–ด ์œ„์น˜์— ์ €์žฅ๋˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ์ด๋ฉด ์ €์žฅ๋˜๋Š” ๊ฐ’์€ ์ •์˜ ๋˜์ง€ ์•Š๊ณ  CPU์˜ Register์™€ ๋‹ค๋ฅด๊ฒŒ ์—ฐ์‚ฐ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

    ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ JVM ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

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

  • Native Method Stack : ๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฐ„์œผ๋กœ ์ž๋ฐ”๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ์ด๋‹ค.

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

    • Permanent Generation : ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์˜ ์ •๋ณด ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์œผ๋กœ ํด๋ž˜์Šค ๋กœ๋”์— ์˜ํ•ด ๋กœ๋“œ๋˜๋Š” class,Method๋“ฑ์˜ ๋ฉ”ํƒ€์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

      Reflection(๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•ด๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ฒ•)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ๋œ๋‹ค.

    • Young Generation

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

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

      ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋“ค์ด ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ์ด ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ๋•Œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

    • Old Generation : ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ๋ฐ”๋€Œ์ง€ ์•Š๊ณ  Young ์˜์—ญ์— ๋‚จ์•„ ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์—ฌ๊ธฐ๋กœ ๋ณต์‚ฌ๋˜๋ฉฐ, Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๊ณ  GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

      ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

      Garbage Collector์˜ ์ž์„ธํ•œ ๋‚ด์šฉ

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

    ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ํ’€์€ ์ด ์ƒ์ˆ˜ํ’€์„ ๋ฐ”ํƒ•์œผ๋กœ ๋Ÿฐํƒ€์ž„(๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ๋ ๋•Œ)์— ๋งŒ๋“ค์–ด์ง„๋‹ค.

    - ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ํ’€ : ์ปดํŒŒ์ผํƒ€์ž„์— ์ด๋ฏธ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’๋ถ€ํ„ฐ ๋Ÿฐํƒ€์ž„์— ํ•ด์„๋˜๋Š” ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ์˜ ์ฐธ์กฐ๊นŒ์ง€๋ฅผ ํฌ๊ด„ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ƒ์ˆ˜๊ฐ€ ํฌํ•จ

JDK์™€ JRE ์ฐจ์ด

  • JDK : Java Development kit์˜ ์•ฝ์ž๋กœ ์ปดํŒŒ์ผ๋Ÿฌ,์—ญ ์–ด์…ˆ๋ธ”๋Ÿฌ,๋””๋ฒ„๊ฑฐ,์˜์กด๊ด€๊ณ„ ๋ถ„์„๋“ฑ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณต

  • JRE : Java Runtime Envirmont์˜ ์•ฝ์ž๋กœ Class Loader, ์‹คํ–‰ ๋ช…๋ น(java)์™€ ๊ฐ™์ด ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณต

  • JVM : Java Virtual Machine์˜ ์•ฝ์ž๋กœ ์ธํ„ฐํ”„๋ฆฌํ„ฐ, JIT๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ OS์— ๋งž๊ฒŒ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ OS์— ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณต

OracleJDK ์™€ OpenJDK์˜ ์ฐจ์ด

JVM์€ ORACLE์ด๋ผ๋Š” ๊ธฐ์—…์ด JVM์˜ ํ‘œ์ค€์„ ์ •์˜ํ•˜๋ฉด Amazon์ด๋‚˜ Oracle,Azul์™€ ๊ฐ™์€ ๊ธฐ์—…๋“ค์ด ํ‘œ์ค€์— ๋”ฐ๋ผ ์‹ค๋ฌผ์„ ๋งŒ๋“ค์–ด ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ, ์ŠคํŽ™๊ณผ ํ‘œ์ค€์„ ์ •์˜ํ•œ Oracle์ด ๋ฐฐํฌํ•œ JDK๊ฐ€ OracleJDK์ด๋ฉฐ, ๊ฐ€๊ฒฉ ์ •์ฑ…์ด ์กด์žฌํ•œ๋‹ค.

๋‹ค๋ฅธ ๊ธฐ์—…๋“ค์ด ๋ฌด๋ฃŒ๋กœ ๋ฐฐํฌํ•œ JDK๋ฅผ OpenJDK๋ผ๊ณ  ํ•œ๋‹ค.


Reference

https://asfirstalways.tistory.com/158 https://m.blog.naver.com/ehcibear314/221228200531 https://catch-me-java.tistory.com/9 https://homoefficio.github.io/2019/01/31/Back-to-the-Essence-Java-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C-%EC%8B%A4%ED%96%89%EA%B9%8C%EC%A7%80-2/

Last updated