JVM JRE JDK它们的区别是什么,什么是 JDK

首先是JDK

javadevelopmentkit ( JDK )是Java语言的软件开发工具包( SDK )。 JDK的安装目录下有一个jre目录,其中有两个文件夹bin和lib。 这里bin中的是jvm,lib中的是jvm工作所需的类库,我们认为jvm和lib合称为jre。

然后再看看JRE

javaruntimeenvironment,Java运行时环境,包括JVM标准实现和Java核心类库。 JRE是Java运行时环境,不是开发环境,因此不包含编译器和调试器等开发工具

最后,JVM也一目了然

JVM是Javavirtualmachine(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域权限等),可以验证NoSuchMethodError、NoSuchMethodError

3 .初始化

初始化过程是对运行类中的静态初始化代码、构造函数代码和静态属性的初始化,在以下四种情况下启动:

调用了new;

反射调用了类中的方法;

子类调用了初始化;

在JVM启动期间指定的初始化类。

ClassLoader抽象类的几种重要方法:

(1)加载类

此方法加载具有给定名称的类。 ClassLoader的实现方法是从已经加载的类开始查找,否则继续从parent ClassLoader开始查找。 如果仍然找不到,请从System ClassLoader中查找,最后调用findClass方法进行查找。 如果要更改类的加载顺序,可以将其复盖

)2) findLoadedClass

此方法搜索从当前ClassLoader实例对象的缓存中加载的类,然后调用native方法。

)3)查找类

由于此方法直接抛出ClassNotFoundException,因此必须通过loadClass或复盖此方法来定制和加载相应的类。

(4) findSystemClass

此方法从System ClassLoader中搜索类,如果找不到,则继续从Bootstrap ClassLoader中搜索,如果找到,则返回null。

)5)定义类

此方法将二进制字节码转换为Class对象

(6)解析类

此方法负责完成到Class对象的链接,如果链接了,则直接返回。

JVM运行时数据区:

第一区块: PC寄存器

PC寄存器用于存储每个线程下一个要执行的JVM指令,如果方法为native,则PC寄存器不会存储任何信息。

第二个块: JVM堆栈

JVM栈是线程的专用栈,它为每个线程创建一个JVM栈。 JVM堆栈包含当前线程的本地基本类型的变量( java中定义的8个基本类型:布尔、字符、字节、短整型、int、long、浮点和双精度)以及部分返回结果

第三张:堆( Heap ) )。

这是JVM用于存储对象实例和数组值的区域,Java在new中创建的所有对象的内存都将分配给此处,而Heap对象的内存必须等待GC回收。

第四方框:方法区域) )。

(1)在Sun JDK中,该区域对应PermanetGeneration,也称为永久世代。

)方法区域容纳了加载的类的信息(名称、修饰符等)、类内的静态变量、类内定义为final型的常数、类内的Field信息、类内的方法信息,开发者在程序内可以看到Class 从isInterface等方法检索信息时,即使在源于方法区域的某些条件下,所有这些数据也会被GC,如果方法区域需要使用的内存超过允许的大小,则会抛出OutOfMemory错误消息。

第五方框:运行时常量池( Runtime Constant Pool ) ) )。

类内的固定参数信息、方法、对领域的参照信息等被存储,其空间是从方法领域分配的。

第六块:局部方法堆栈)。

JVM使用本地方法堆栈支持执行存储每个native方法调用的状态的native方法。

剪辑教程

如何把音乐flac转换成mp3格式,下载的音乐是flac格式怎么转换成mp3格式

2022-10-21 11:53:11

剪辑教程

FPGA芯片架构设计与实现,fpga基本结构

2022-10-21 12:12:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索