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
网友评论