πŸ’»
Albert's Til
GitHub
  • 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
    • README
    • CS
      • Network
      • HTTP
        • NO-CACHE
      • 였λ₯˜ μ½”λ“œ
      • ORM 도ꡬ
      • Design Pattern
        • CQRS Pattern
          • Event Sourcing and CQRS pattern
        • Builder Pattern
    • DB
      • MySQL
        • Timeline
        • Pagination
        • Index
        • Database Performance Optimization Strategies
        • B+ tree
        • MySQL Connectors VS MySQL Shell(Scripting) VS MySQL Workbench
        • MySQL Storage Engine Architecture
      • Normalization & Denormalization
      • JPA
        • @Transactional
        • Why JPA?
        • About JPA
        • N+1 Issue
        • Index
        • ElementCollection&CollectionTable
        • orphanRemoval
        • CascadeType
        • Use Subselect
        • Dynamic Instance Creation
        • Paging
        • Order
        • Spefication
        • mappedBy
      • MongoDB
        • ObjectId
      • Why MySQL?
      • ACID properties of transactions
      • Between JPA and JDBC
      • Identifiers in Hibernate/JPA
    • Java
      • Jackson de/serialize
      • Collections.singletonList() vs List.of()
      • Manage dependencies in Gradle
      • Logging Level
      • Bean Validation
      • JVM Internals
        • Threads
          • Frame
        • Shared Between Threads
          • Classloader
            • Class Loader Hierarchy
            • Loading Linking Initialization
      • Java Collection Framework
      • Annotation
      • Generic
      • λ””λ―Έν„° 법칙
    • Spring
      • Caching
      • Spring Integration Overview
        • ThreadPollTaskExecutor
        • Messaging Bridge
        • Channel Adapter
        • Poller
        • Configuration and @EnableIntegration
        • Message Endpoints
        • Message Channels
      • HATEOAS
      • @Autowired vs Constructor Dependency Injection
      • Spring Security
        • JWT 토큰 μ‚¬μš©ν•œ 인가
        • OAuth 2 Login
        • OAuth 2 인증
        • 인가
        • 인증
        • PasswordEncoder
      • IoC Container
      • Filter,Interceptor,AOP,Argument Resolver
      • Spring Annotation
      • About Spring
    • Kafka
      • Error Channel
    • Infra
      • Scale Up || Scale Out
      • Docker
        • Dockerfile
        • Docker Hub Deploy
        • Command
      • Cloud μœ ν˜•
        • Infrastructure as a Service
        • Platform as a Service
        • Software as a Service
      • 무쀑단 배포
        • μ—”μ§„μ—‘μŠ€(Nginx)
      • μ½”λ“œ μžλ™ 배포
        • Technical
      • AWS EC2
        • PEM(Privacy Enhanced Mail) ν‚€
      • AWS RDS
      • AWS S3
    • CodeSquad
      • Spring Boot Project 1μ£Όμ°¨ 회고
      • Spring Boot Project 2μ£Όμ°¨ 회고
      • Spirng Boot Project 3μ£Όμ°¨ 회고
      • Spring Boot Project 4μ£Όμ°¨ 회고
    • Foody Moody ν”„λ‘œμ νŠΈ
      • Query Performance Comparison
      • HeartCount Asynchronous Issue
      • DeferredResult
      • ResponseBodyEmitter
      • SseEmitter (Spring)
      • Server-Sent Events (SSE)
      • 기술 μŠ€νƒ 적용 이유
      • NO-CACHE(HTTP)
      • Transactional
    • DDD
      • AggregateId
    • Test
      • RestAssured
    • Coding and Algorithmic Problems
      • 819. Most Common Word
      • 344. Reverse String
      • 125. Valid Palindrome
      • 937. Reorder Data in Log Files
    • Node
      • Async... Await...
      • Custom Transactional Decorator Challenger
    • Python
      • Python Basic Grammar
        • Comments and Input/Output
        • Variable
        • Data type
        • Operations and syntax
        • List,Tuple,Dictionary,Set
        • Function
        • Conditional statement
        • Loop
    • HTML
      • HTML Basic
      • HTML Basic Tags
      • HTML Form Tags
      • HTML Table Tags
    • CSS
      • CSS Basic
      • CSS Practice
Powered by GitBook
On this page
  • Loading
  • Linking
  • Verifying
  • Perparing
  • Resolving
  • Initialization

Was this helpful?

  1. 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
  2. Java
  3. JVM Internals
  4. Shared Between Threads
  5. Classloader

Loading Linking Initialization

Last updated 2 years ago

Was this helpful?

JVM은 λΆ€νŠΈμŠ€νŠΈλž© ν΄λž˜μŠ€λ‘œλ”λ₯Ό μ‚¬μš©ν•˜μ—¬ 초기 클래슀λ₯Ό λ‘œλ“œν•˜μ—¬ μ‹œμž‘λ©λ‹ˆλ‹€. 그런 λ‹€μŒ public static void main(String[])이 호좜되기 전에 ν΄λž˜μŠ€κ°€ μ—°κ²°λ˜κ³  μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€. 이 λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ ν•„μš”μ— 따라 μΆ”κ°€ 클래슀 및 μΈν„°νŽ˜μ΄μŠ€μ˜ λ‘œλ“œ, μ—°κ²° 및 μ΄ˆκΈ°ν™”κ°€ μ°¨λ‘€λ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.

Loading

**Loading**은 νŠΉμ • 이름을 κ°€μ§„ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ μœ ν˜•μ„ λ‚˜νƒ€λ‚΄λŠ” 클래슀 νŒŒμΌμ„ μ°Ύμ•„ λ°”μ΄νŠΈ λ°°μ—΄λ‘œ μ½λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ λ°”μ΄νŠΈλ₯Ό parsedν•˜κ³  Class 객체λ₯Ό λ‚˜νƒ€λ‚΄κ³  μ˜¬λ°”λ₯Έ major 버전과 minor 버전이 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.direct 슈퍼클래슀둜 λͺ…λͺ…λœ λͺ¨λ“  클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ„ λ‘œλ“œλ©λ‹ˆλ‹€. 이 μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ 이진 ν‘œν˜„μ—μ„œ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ 객체가 μƒμ„±λ©λ‹ˆλ‹€.

Linking

**Linking**λŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ νƒ€μž…κ³Ό direct 슈퍼클래슀 및 μŠˆνΌμΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μΈν•˜κ³  μ€€λΉ„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€. lining은 확인, μ€€λΉ„ 및 μ„ νƒμ μœΌλ‘œ ν•΄κ²°ν•˜λŠ” μ„Έ λ‹¨κ³„λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

Verifying

**Verifying**은 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ ν‘œν˜„μ΄ ꡬ쑰적으둜 μ •ν™•ν•˜κ³  Java ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 및 JVM의 semantic μš”κ΅¬ 사항을 μ€€μˆ˜ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λ‹€μŒ 확인이 μˆ˜ν–‰λ©λ‹ˆλ‹€.

  1. μΌκ΄€λ˜κ³  μ˜¬λ°”λ₯Έ ν˜•μ‹μ˜ symbol ν…Œμ΄λΈ”

  2. μž¬μ •μ˜λ˜μ§€ μ•Šμ€ μ΅œμ’… λ©”μ„œλ“œ/클래슀

  3. λ©”μ„œλ“œμ—λŠ” μ˜¬λ°”λ₯Έ μˆ˜μ™€ λ§€κ°œλ³€μˆ˜ νƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€.

  4. λ°”μ΄νŠΈ μ½”λ“œλŠ” μŠ€νƒμ„ 잘λͺ» μ‘°μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  5. λ³€μˆ˜λŠ” 읽기 전에 μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€

  6. λ³€μˆ˜λŠ” μ˜¬λ°”λ₯Έ νƒ€μž…μ˜ κ°’μž…λ‹ˆλ‹€.

확인 λ‹¨κ³„μ—μ„œ μ΄λŸ¬ν•œ 검사λ₯Ό μˆ˜ν–‰ν•˜λ©΄ μ΄λŸ¬ν•œ 검사λ₯Ό λŸ°νƒ€μž„μ— μˆ˜ν–‰ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. Linking 쀑 확인은 클래슀 λ‘œλ”© 속도λ₯Ό λŠ¦μΆ”μ§€λ§Œ λ°”μ΄νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ μ΄λŸ¬ν•œ 검사λ₯Ό μ—¬λŸ¬ 번 μˆ˜ν–‰ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

Perparing

**Preparing**μ—λŠ” λ©”μ„œλ“œ ν…Œμ΄λΈ”κ³Ό 같이 JVMμ—μ„œ μ‚¬μš©ν•˜λŠ” 정적 μŠ€ν† λ¦¬μ§€ 및 λͺ¨λ“  데이터 ꡬ쑰λ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬ 할당이 ν¬ν•¨λ©λ‹ˆλ‹€. 정적 ν•„λ“œκ°€ μƒμ„±λ˜κ³  κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜μ§€λ§Œ μ΄ˆκΈ°ν™”μ˜ μΌλΆ€λ§Œ λ°œμƒν•˜λ―€λ‘œ 이 λ‹¨κ³„μ—μ„œλŠ” μ΄ˆκΈ°ν™” ν”„λ‘œκ·Έλž¨μ΄λ‚˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Resolving

**Resolving**은 참쑰된 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‘œλ“œν•˜κ³  μ°Έμ‘°κ°€ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜μ—¬ symbolic μ°Έμ‘°λ₯Ό ν™•μΈν•˜λŠ” 선택적 λ‹¨κ³„μž…λ‹ˆλ‹€. 이 μ‹œμ μ—μ„œ 이것이 λ°œμƒν•˜μ§€ μ•ŠμœΌλ©΄ symbolic 참쑰의 확인은 λ°”μ΄νŠΈ μ½”λ“œ λͺ…령에 μ˜ν•΄ μ‚¬μš©λ˜κΈ° μ§μ „κΉŒμ§€ 연기될 수 μžˆμŠ΅λ‹ˆλ‹€.

Initialization

클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ μ΄ˆκΈ°ν™”λŠ” 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ„œλ“œ<clinit> μ‹€ν–‰μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.