美文网首页Java
Java之JVM前期准备

Java之JVM前期准备

作者: Jason_Sam | 来源:发表于2019-05-19 21:37 被阅读107次

    JVM的意义

    “Write once,run anywhere”是我对Java平台最直观的印象,Java是如何做到“一次编写,到处运行”这个效果的呢?没错,这得益于JVM——Java虚拟机,只要每个平台都拥有一台“Java虚拟机”,Java程序就得以运行。目前,JVM都被打包在JRE,JRE包含在JDK中。

    Java程序如何执行

    1. .java文件通过Java编译器生成Java字节码即(.class文件)。

    2. Java字节码通过经过类加载器的验证。

    3. 类加载器将通过验证的Java字节码加载到JVM中。

    4. Java字节码被Java解释器执行或者即时编译器生成机器码执行。

    Java程序执行流程

    JVM与各个平台的关系

    平台与JVM关系

    在Java平台的结构中, 可以看出,Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性。 

    Java编译器工作

    Java编译器执行顺序(从左到右)

    Java类加载

    类加载

    Java字节码通过类加载到方式加载到JVM,类加载是双亲委派方式进行加载。双亲委派:如果一个类加载器收到类加载的请求,自身并不会马上加载,而是请求它的父类,检查是否存在该请求类,如果该类能够在父类加载就不会分配到子类加载,只有父类不能加载才会分配到子类去加载。

    ①Bootstrap ClassLoader:负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类

    ②Extension ClassLoader:负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

    ③App ClassLoader:负责记载classpath中指定的jar包及目录中class

    ④Custom ClassLoader:属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader

    相关文章

      网友评论

        本文标题:Java之JVM前期准备

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