java-初识JVM运行及类加载过程

简介:

类加载机制:

      JVM把class文件加载到内存,并对数据进行校验,解析和初始化,最终形成JVM可以直接使用的Java类型的过程。

类加载全过程:

  加载:

       将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问路口,这个过程需要类加载器参与。

  链接:  将Java类的二进制代码合并到JVM的运行状态之中的过程。

  (1)验证:确保加载的类信息符合JVM规范,没有安全方面的问题。

  (2)准备:正式为类变量(static变量)分配内存并设置变量初始值的阶段,这些内存都将在方法区中进行分配。

  (3)解析:虚拟机中常量池的符号引用替换为直接引用的过程。

 初始化:

    初始化阶段是执行类构造器方法的过程,类构造器方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合成的。

    当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先出发其父类的初始化。

    虚拟机会保证一个类的方法在多线程环境中被正确加锁和同步。

    当访问一个Java类的静态域时,只有真正声明这个域的类才会被初始化。

类加载器的层次结构(树状结构):

(1)引导类加载器:用来加载Java的核心库,是由原生代码来实现的,并不继承自java.lang.ClassLoader,加载扩展类和应用程序类加载器,并指定它们的父类加载器。

(2)扩展类加载器:用来加载Java的扩展库,Java虚拟机的实现会提供一个扩展库目录,该类加载器在此目录里面查找并加载Java类。由sun.misc.Launcher$ExtClassLoader实现。

(3)应用程序类加载器:根据Java应用的类路径(classpath,java.class.path)路类实现,一般来说,Java应用的类都是由它来完成加载的。由sun.misc.Launcher$AppClassLoader实现。

(4)自定义类加载器:开发人员通过继承java.lang.ClassLoader类的方式实现自己的类加载器,以满足一些特殊的需求。

 类加载全过程图示:

简单分析类加载器作用:

内存分析:

 ps:文章待完善,内容后续补全。

猜你喜欢

转载自www.cnblogs.com/weekstart/p/10845608.html
今日推荐