美文网首页
JVM类加载过程及类加载器详解

JVM类加载过程及类加载器详解

作者: 那就这样吧丶xx | 来源:发表于2022-04-27 16:13 被阅读0次

    类加载过程详解

    类的生命周期

    加载:获取此类的二进制流,并加载到方法区,并在堆中生成一个java.lang.Class对象,作为方法区这个类的访问入口。
    验证:验证字节流是否符合虚拟机的标准。
    准备:为类变量(static)分配内存(注意,逻辑上的方法区,实际上的堆)和零值(初值)。
    解析:把类中的符号引用转换为直接引用
    初始化:执行类构造器()方法,为类变量(static)初始化值(自定义值)。

    类加载器

    所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。
    启动类加载器):最顶层的加载类,由 C++实现,负责加载 %JAVA_HOME%/lib目录下的 jar 包和类或者被 -Xbootclasspath参数指定的路径中的所有类
    扩展类加载器 :主要负责加载 %JRE_HOME%/lib/ext 目录下的 jar 包和类,或被 java.ext.dirs 系统变量所指定的路径下的 jar 包。
    应用程序类加载器:面向我们用户的加载器,负责加载当前应用 classpath 下的所有 jar 包和类

    双亲委派模型

    classloader_WPS图片.png

    在类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。加载的时候,首先会把该请求委派给父类加载器的 loadClass() 处理,因此所有的请求最终都应该传送到顶层的启动类加载器 BootstrapClassLoader 中。当父类加载器无法处理时,才由自己来处理。当父类加载器为 null 时,会使用启动类加载器 BootstrapClassLoader 作为父类加载器。

    双亲委派模型的好处

    双亲委派模型保证了 Java 程序的稳定运行,可以避免类的重复加载,也保证了 Java 的核心 API 不被篡改。

    总结

    Java文件经过编译后变成 .class 字节码文件
    字节码文件通过类加载器被搬运到 JVM 虚拟机中
    虚拟机主要的5大块:方法区,堆都为线程共享区域,有线程安全问题,栈和本地方法栈和计数器都是独享区域,不存在线程安全问题,而 JVM 的调优主要就是围绕堆,栈两大块进行

    相关文章

      网友评论

          本文标题:JVM类加载过程及类加载器详解

          本文链接:https://www.haomeiwen.com/subject/hdchyrtx.html