首先是JDK
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK) 。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre 。
然后我们来看JRE
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库 。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
最后JVM也一目了然了
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。
文章插图
由上图一目了然:
JDK是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库 。JRE是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库 。JVM是整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序 。
JVM体系结构与运行原理:
Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行 。
文章插图
JVM整个类加载过程的步骤:
1. 装载
装载过程负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名通过ClassLoader来完成类的加载,同样,也采用以上三个元素来标识一个被加载了的类:类名 包名 ClassLoader实例ID 。
2. 链接
链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接口、类 。
完成校验后,JVM初始化类中的静态变量,并将其值赋为默认值 。
最后对类中的所有属性、方法进行验证,以确保其需要调用的属性、方法存在,以及具备应的权限(例如public、private域权限等),会造成NoSuc百思特网hMethodError、NoSuchFieldError等错误信息 。
3. 初始化
初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化,在四种情况下初始化过程会被触发执行:百思特网
调用了new;
反射调用了类中的方法;
子类调用了初始化;
JVM启动过程中指定的初始化类 。
文章插图
ClassLoader抽象类的几个关键方法:
(1) loadClass
此方法负责加载指定名字的类,ClassLoader的实现方法为先从已经加载的类中寻找,如没有则继续从parent ClassLoader中寻找,如仍然没找到,则从System ClassLoader中寻找,最后再调用findClass方法来寻找,如要改变类的加载顺序,则可覆盖此方法
(2) findLoadedClass
此方法负责从当前ClassLoader实例对象的缓存中寻找已加载的类,调用的为native的方法 。
(3) findClass
此方法直接抛出ClassNotFoundException,因此需要通过覆盖loadClass或此方法来以自定义的方式加载相应的类 。
(4) findSystemClass
此方法负责从System ClassLoader中寻找类,如未找到,则继续从Bootstrap ClassLoader中寻找,如仍然为找到,则返回null 。
(5) defineClass
此方法负责将二进制的字节码转换为Class对象
(6) resolveClass
此方法负责完成Class对象的链接,如已链接过,则会直接返回 。
JVM运行时数据区:
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 同比增幅最大什么意思 同比增长是什么意思
- brushes是什么意思 brush是什么意思
- 补肾最好的时间是什么时候
- 有序的公共生活是什么的重要标志
- kvarh在电表代表什么意思
- 芝士片百度百科 cheese是什么意思
- 灏念什么 灏怎么读音是什么
- 信阳毛尖怎么泡 信阳毛尖是什么茶
- 不刊之论是什么意思 望其项背是什么意思
- reflect形容词形式是什么 reflect是什么意思