博客
关于我
JVM类加载器详解
阅读量:765 次
发布时间:2019-03-23

本文共 2985 字,大约阅读时间需要 9 分钟。

Java Class Loading Mechanism Explained

The Java class loading mechanism is a cornerstone of the Java Virtual Machine (JVM) that ensures applications run correctly by dynamically loading classes into memory. This process is managed by the ClassLoader class, which acts as a bridge between the external class files and the JVM's runtime environment.

The Class Loader Phases

The class loader operates through three main phases, each ensuring that classes are loaded, linked, and initialized correctly.

  • Loading Phase (Verification and Preparing)

    • Verification: The class loader reads the byte code from the file and checks it against the JVM specification to ensure it conforms to the expected structure. This prevents the loading of invalid or malformed class files.
    • Preparation: The class loader initializes the static variables and assigns default values to instance variables. This is done by the Class inappropriate class.
  • Linking Phase (Validation and Resolution)

    • Validation: The class loader cross-verifies the dynamic variables and ensures static fields are correctly resolved.
    • Resolution: The class loader converts symbolic references in the class file into direct references within the JVM. This is necessary for the JVM to efficiently access the classes and their members.
  • Initialization Phase

    • The class loader initializes the class by invoking its constructor. This process is managed by the JVM's clint method, which generates the initialization code dynamically based on the class structure.
  • Class Loader Types

    In the JVM, class loading is delegated to different class loaders. These include:

  • Bootstrap Class Loader (BootstrapClassLoader)

    • Written in C and responsible for loading core Java libraries (e.g., java.lang, javax, sun packages).
    • Operates in a isolated sandbox environment.
  • Extension Class Loader (ExtClassLoader)

    • Loads classes from the JAVA_HOME/jre/lib/ext directory. It allows third-party vendors to add their own classes by placing JAR files in this directory.
  • Application Class Loader (AppClassLoader)

    • Responsible for loading application classes from the classpath. It delegates loading requests to the Extension Class Loader unless a specific class is already loaded.
  • Double-Checked Locking Mechanism

    The class loader ensures that each class is loaded only once through the double-checked locking mechanism. This involves:

  • Checking if the class is already loaded.
  • If not, initiating the loading process.
  • Once the class is loaded, subsequent checks return the loaded class without re-loading.
  • This mechanism also supports the JVM's sandbox environment, preventing external classes from overriding core Java classes.

    Understanding the class loading mechanism is crucial for Java developers as it affects Everything from development to debugging, especially when dealing with classpath issues or performance optimizations.

    By mastery of the class loader architecture, you gain insight into how the JVM manages and enhances the dynamic nature of Java applications.

    转载地址:http://itozk.baihongyu.com/

    你可能感兴趣的文章
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named 'pandads'
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>
    No qualifying bean of type XXX found for dependency XXX.
    查看>>
    No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
    查看>>
    No resource identifier found for attribute 'srcCompat' in package的解决办法
    查看>>
    no session found for current thread
    查看>>