Java入门之了解JVM(22)

启动类加载器:用于加载 JAVA_HOME\lib 或者通过 -Xbootclasspath 指定路径下的class文件或jar

扩展类加载器:用于加载 JAVA_HOME\lib\ext 目录下的class文件或jar

应用程序类加载器:用于加载应用 classpath 下的class文件或jar

对于JVM来说只有两种类型的类加载器:Bootstrap ClassLoader 和 其他继承了java.lane.ClassLoader的ClassLoader;其中Bootstrap ClassLoader是用C++实现的;如图所示,这个双亲委派模型的ClassLoader并不是通过继承来去实现的,而是通过组合的方式实现的;双亲委派模型主要目的是为了防止对class文件被不同的类加载器多次被加载导致生成没必要的class对象;要求子ClassLoader在接收到需要加载某个class文件请求时,尽量将其提交给自己的父ClassLoader去加载,直到父ClassLoader表明无法加载时才自己进行加载;双亲委派模型并不是一个强制的约束模型,而是设计者推荐的模型,所以大部分都是按照这个模型去实现的;简单介绍一下JVM

JVM的全称叫Java Virtual Machine,即java虚拟机java之所以能够跨平台,全因为JVM的功劳java通过编译器将其源码编译成JVM所识别的字节码(这是一种中间码,介乎于机器码和高级语言之间),来运行java程序,而不是像C/C++那样直接编译成机器码运行,即不论在什么平台,只要能够装上JVM就能够运行java的程序目前除了Java之外,如近年兴起的Kotlin也是基于JVM的(当然还有其它),所以千万不要以为JVM只能运行java程序,准确点说JVM识别的是字节码而不是java程序,所以不管是什么语言,只要自身能够编译成JVM能够识别的字节码就可以运行在JVM上,即也就能够跨平台了推荐书籍《深入理解Java虚拟机》JVM运行时数据区域

推荐阅读