BlueHarmel
BlueHarmel Devlog
BlueHarmel
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝
  • λΆ„λ₯˜ 전체보기 (330)
    • Book (11)
    • Dev (29)
      • ArtCon (0)
      • ESTsoft 였λ₯΄λ―Έ (29)
    • Study (290)
      • Web (18)
      • AWS (2)
      • μ•Œκ³ λ¦¬μ¦˜ (1)
      • GameDev (1)
      • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ (201)
      • English (1)
      • Mathematics (24)
      • λ¨Έμ‹ λŸ¬λ‹ (7)
      • λ”₯λŸ¬λ‹ (10)
      • λ„€νŠΈμ›Œν¬ λ³΄μ•ˆ (5)
      • R (4)
      • 컴퓨터 λ„€νŠΈμ›Œν¬ (6)
      • λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • 데이터 톡신 (0)
      • 운영체제 (2)
      • TIL (0)
    • Project (0)
      • 개인 (0)
      • 단체 (0)

인기 κΈ€

hELLO Β· Designed By μ •μƒμš°.
BlueHarmel

BlueHarmel Devlog

Dev/ESTsoft 였λ₯΄λ―Έ

JVM 쑰사 : ClassLoader

2024. 2. 23. 10:58
πŸ€¦β€β™‚οΈ

1. ν΄λž˜μŠ€λ‘œλ”λž€?

  • μžλ°” ν΄λž˜μŠ€λ“€μ€ μ‹œμž‘μ‹œ ν•œλ²ˆμ— λ‘œλ“œλ˜μ§€ μ•Šκ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν•„μš”ν•  λ•Œ λ‘œλ“œλœλ‹€.
  • ν΄λž˜μŠ€λ‘œλ” : JRE의 μΌλΆ€λ‘œμ¨ λŸ°νƒ€μž„μ— 클래슀λ₯Ό λ™μ μœΌλ‘œ JVM에 λ‘œλ“œν•˜λŠ” 역할을 μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“ˆ
  • μžλ°”μ˜ ν΄λž˜μŠ€λ“€μ€ μžλ°” ν”„λ‘œμ„ΈμŠ€κ°€ μƒˆλ‘œ μ΄ˆκΈ°ν™”λ˜λ©΄ ν΄λž˜μŠ€λ‘œλ”κ°€ μ°¨λ‘€λ‘œ λ‘œλ”©λ˜λ©° μž‘λ™

2. 계측ꡬ쑰

  1. λΆ€νŠΈμŠ€νŠΈλž© ν΄λž˜μŠ€λ‘œλ”(Bootstrap classloader)
    1. μ΅œμƒμœ„ μš°μ„ μˆœμœ„λ₯Ό κ°–λŠ” 클래슀 λ‘œλ”
    1. jre/lib/rt.jarλ₯Ό λ‘œλ“œ
    1. λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ κ΅¬ν˜„λ˜μ–΄μžˆλ‹€
  1. ν™•μž₯ 클래슀 λ‘œλ”(Extension classloader)
    1. jre/lib/ext에 ν¬ν•¨λœ 클래슀 νŒŒμΌμ„ λ‘œλ“œ
    1. java.ext.dirs ν™˜κ²½ λ³€μˆ˜λ‘œ μ§€μ •λœ 폴더에 μžˆλŠ” 클래슀 νŒŒμΌμ„ λ‘œλ”©
    1. Java둜 κ΅¬ν˜„λ˜μ–΄ 있으며, sun.misc.Launcher 클래슀 μ•ˆμ— 정적 클래슀둜 κ΅¬ν˜„λ˜μ–΄μžˆμœΌλ©° URLClassLoaderλ₯Ό μƒμ†ν•˜κ³  μžˆλ‹€.
  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν΄λž˜μŠ€λ‘œλ”(Application classloader)
    1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 클래슀 νŒ¨μŠ€μ—μ„œ 클래슀λ₯Ό 읽어 λ‘œλ“œ
    1. -classpath ν˜Ήμ€ -cp μ˜΅μ…˜μœΌλ‘œ μ€€ κ²½λ‘œλ‚˜ JAR 파일 μ•ˆμ— μžˆλŠ” Manifest 파일의 Class-Path 속성 κ°’μœΌλ‘œ μ§€μ •λœ 폴더에 μžˆλŠ” 클래슀λ₯Ό λ‘œλ”©
    1. Java둜 κ΅¬ν˜„λ˜μ–΄ 있으며 sun.misc.Launcher 클래슀 μ•ˆμ— static 클래슀둜 κ΅¬ν˜„λ˜μ–΄ 있으며, URLClassLoaderλ₯Ό 상속
    1. κ°œλ°œμžκ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ동을 μœ„ν•΄ 직접 μž‘μ„±ν•œ λŒ€λΆ€λΆ„μ˜ ν΄λž˜μŠ€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 클래슀 λ‘œλ”μ— μ˜ν•΄ λ‘œλ”©λœλ‹€.

3. 클래슀 λ‘œλ”κ°€ μ§€μΌœμ•Όν•  3κ°€μ§€ 원칙

  1. Delegation Principle
    1. 클래슀 λ‘œλ”© μž‘μ—…μ„ μƒμœ„ 클래슀 λ‘œλ”μ— μœ„μž„
  1. Visibility Principle
    1. ν•˜μœ„ 클래슀 λ‘œλ”λŠ” μƒμœ„ 클래슀 λ‘œλ”κ°€ λ‘œλ“œν•œ 클래슀의 λ‚΄μš©μ„ λ³Ό 수 μžˆμ§€λ§Œ μƒμœ„ 클래슀 λ‘œλ”λŠ” ν•˜μœ„ 클래슀 λ‘œλ”κ°€ λ‘œλ“œν•œ λ‚΄μš©μ„ λ³Ό 수 μ—†λ‹€.
    1. μƒμœ„ 클래슀 일수둝 더 보편적으둜 μ‚¬μš©ν•˜λŠ” ν΄λž˜μŠ€λ“€μ΄ 있기 λ•Œλ¬Έ
    1. μƒμœ„κ°€ ν•˜μœ„λ₯Ό λ³Ό 수 μžˆλ‹€λ©΄, κ³„μΈ΅μ μœΌλ‘œ ꡬ뢄해놓은 μ΄μœ κ°€ μ—†μ–΄μ§„λ‹€
  1. Uniqueness Principle
    1. ν•˜μœ„ ν΄λž˜μŠ€λ‘œλ”λŠ” μƒμœ„ 클래슀 λ‘œλ”κ°€ λ‘œλ”©ν•œ 클래슀λ₯Ό λ‹€μ‹œ λ‘œλ”©ν•˜μ§€ μ•Šκ²Œ ν•΄μ„œ λ‘œλ”©λœ 클래슀의 μœ μΌμ„±μ„ 보μž₯ν•œλ‹€.
    1. μœ μΌμ„±μ„ μ‹λ³„ν•˜λŠ” κΈ°μ€€ : 클래슀의 BinaryName
      1. java.lang.String | java.net.URLClassLoader$3$1

4. ν΄λž˜μŠ€λ‘œλ”λ₯Ό μ—¬λŸ¬κ°œ μ‚¬μš©ν•˜λŠ” 이유

  • λͺ¨λ“ˆν™”κ°€ κ°€λŠ₯
  • 클래슀의 μΆ©λŒμ„ ν”Όν•  수 μžˆλ‹€
  • 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€
    • μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν΄λž˜μŠ€λŠ” μ–Έλ‘œλ“œν•΄μ„œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄일 수 μžˆλ‹€.
      • 클래슀 λ‘œλ”μ— μ˜ν•΄ λ‘œλ“œλœ ν΄λž˜μŠ€λŠ” μž„μ˜λ‘œ μ–Έλ‘œλ“œ ν•  수 μ—†λ‹€.
      • λ‹€λ§Œ 클래슀 λ‘œλ” 자체λ₯Ό μ œκ±°ν•˜λ©΄μ„œ μ–Έλ‘œλ“œν•  수 μžˆλ‹€.
    • λ™μ μœΌλ‘œ ν΄λž˜μŠ€λ‚˜ λ¦¬μ†ŒμŠ€λ₯Ό μΆ”κ°€κ°€λŠ₯
    • μš΄μ˜μ€‘μ— μˆ˜μ •λœ 클래슀λ₯Ό λ™μ μœΌλ‘œ λ¦¬λ‘œλ”©ν•˜κΈ° μš©μ΄ν•˜λ‹€.

5. 좜처

https://leeyh0216.github.io/posts/java_class_loader/

https://hbase.tistory.com/174

https://kkang-joo.tistory.com/10

'Dev > ESTsoft 였λ₯΄λ―Έ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ œλ„€λ¦­  (0) 2024.02.23
μ˜ˆμ™Έμ²˜λ¦¬  (0) 2024.02.23
μΈν„°νŽ˜μ΄μŠ€  (0) 2024.02.23
상속  (0) 2024.02.23
클래슀  (0) 2024.02.23
    BlueHarmel
    BlueHarmel
    Interested in Mathematics, Foreign Language, and "Programming"

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”