ClassLoader

  • JVM์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ชจ๋“  Class๋“ค์€ ์ฐธ์กฐ๋˜๋Š” ์ˆœ๊ฐ„ ๋™์ ์œผ๋กœ Load ๋ฐ Link๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ClassLoader๋Š” ํด๋ž˜์Šค๋“ค์„ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉํ•  ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Class Load ๋ฐฉ์‹์— ๋Œ€ํ•ด

  • Load Time Dynamic Loading
    • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํ•œ๋ฒˆ์— ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • Run Time Dynamic Loading
    • Reflection๊ณผ ๊ฐ™์€ ์‹ค์ œ๋กœ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋ ๋•Œ ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

ClassLoader ๊ณผ์ •์— ๋Œ€ํ•ด

Loading

  • ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ .class ํŒŒ์ผ์„ ์ฝ๊ณ , ๊ทธ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฉ”์†Œ๋“œ ์˜์—ญ์— ์ €์žฅํ•˜๋Š” ํ–‰์œ„
    • Loadingํ•˜๋ฉด์„œ JVM ์ŠคํŽ™์ด ๋งž๋Š”์ง€ ํ™•์ธ
    • Java Version ํ™•์ธ

Linking

  • ์ด ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๋‹ค.
  • Verify
    • JVM์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์ธ์ง€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ์ž‘์—…
    • ํ•ด๋‹น ๋น„์šฉ์ด ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ต์…˜์„ ํ†ตํ•ด Disabled ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Preparation
    • Type์ด ํ•„์š”๋กœ ํ•˜๋Š” Memory๋ฅผ ํ• ๋‹นํ•ด ์ฃผ๋Š” ์ž‘์—…
  • Resolution
    • ์‹ฌ๋ณผ๋ฆญ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ฉ”์†Œ๋“œ ์˜์—ญ์— ์žˆ๋Š” ์‹ค์ œ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ต์ฒดํ•œ๋‹ค. ์ด ๊ณผ์ •์€ Optional์ด๋‹ค.
    • Constant Pool์˜ Symbolic Reference๋ฅผ Direct Reference, ์ฆ‰ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๋Š” ์ž‘์—…์„ ์˜๋ฏธ

Initialization

  • Static ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค. (static ๋ธ”๋Ÿญ์ด ์žˆ๋‹ค๋ฉด ์ด๋•Œ ์‹คํ–‰๋œ๋‹ค.)
  • SuperClass ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  • SuperClass๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ ํ›„ ํ•ด๋‹น Class์˜ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

ClassLoader ์ข…๋ฅ˜

  • ํด๋ž˜์Šค ๋กœ๋”๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์ด๋ค„์ ธ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธ๊ฐ€์ง€ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ์ œ๊ณต๋œ๋‹ค.
  • Bootstrap ClassLoader
    • ์ตœ์ƒ์œ„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค ๋กœ๋”
    • jre/lib/rt.jar์„ ๋กœ๋”ฉํ•œ๋‹ค.
      • ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
  • Extension ClassLoader
    • jre/lib/ext์— ํฌํ•จ๋œ ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋”ฉํ•œ๋‹ค.
  • Application ClassLoader
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์ŠคํŒจ์Šค(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ํ•  ๋•Œ ์ฃผ๋Š” -classpath ์˜ต์…˜ ๋˜๋Š” java.class.path ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜)์—์„œ ํด๋ž˜์Šค๋ฅผ ์ฝ๋Š”๋‹ค.

ClassLoader Principle

  • Delegation
    • ํด๋ž˜์Šค๋กœ๋”ฉ ์ž‘์—…์„ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋”์— ์œ„์ž„ํ•œ๋‹ค.
  • Visibility
    • ํ•˜์œ„ ํด๋ž˜์Šค๋กœ๋”๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋”์˜ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ๋Š” ๋ณผ ์ˆ˜ ์—†๋‹ค.
    • Tomcat ClassLoading
  • Uniquesness
    • ํ•˜์œ„ ํด๋ž˜์Šค๋กœ๋”๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋”๊ฐ€ ๋กœ๋”ฉํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ค์‹œ ๋กœ๋”ฉํ•˜์ง€ ์•Š๊ฒŒ ํ•ด์„œ ๋กœ๋”ฉ๋œ ํด๋ž˜์Šค์˜ ์œ ์ผ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

ํ™•์ธํ•ด๋ณด์ž

java -verbose:class HelloWorld

ClassLoader๊ด€๋ จ Quiz

์™œ ํด๋ž˜์Šค ๋กœ๋”๋“ค์€ ์—ฌ๋Ÿฌ๊ฐœ์—ฌ์•ผ ํ•˜๋Š”๊ฐ€?

Java9์˜ ClassLoader ๋ณ€ํ™”

Reference