java虚拟机工作原理 ╰半橙微兮° 2022-07-16 09:08 234阅读 0赞 **一、什么是Java虚拟机 ** Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,如处理器、堆栈、寄存器、还有相应的指定系统。 **总结:java虚拟机--处理器、堆栈、寄存器、指令系统。** **二、为什么使用Java虚拟机 ** Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 总结:java平台无关性、把目标代码编译成字节码 **三、Java虚拟机的生命周期 ** 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时它才运行,程序结束时它就停止。假如你同时运行三个Java程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法,这个方法必须是公有public、返回void、直接接收一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包含有main()方法的类名。 Main()方法是程序的起点,它被执行的线程初始化为程序的初始线程。程序中其它的线程都由他来启动。Java中的线程分为两种:守护线程 (daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负责垃圾收集的线程就是一个守护线程。当然,你也可以把自己的程序设置为守护线程。包含Main()方法的初始线程不是守护线程。 只要Java虚拟机中还有普通的线程在执行,Java虚拟机就不会停止。如果有足够的权限,你可以调用exit()方法终止程序。 **总结:Main()方法是程序的起点、守护线程和普通线程、权限足够调用exit()终止程序** **四、Java虚拟机的体系结构** 在Java虚拟机的规范中定义了一系列的子系统、内存区域、数据类型和使用指南。这些组件构成了Java虚拟机的内部结构,他们不仅仅为Java虚拟机的实现提供了清晰的内部结构,更是严格规定了Java虚拟机实现的外部行为。 每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类class和接口interface),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。 总结:类加载子系统、执行引擎 程序的执行需要一定的内存空间,如字节码、被加载类的其他额外信息、程序中的对象、方法的参数、返回值、本地变量、处理的中间变量等等。Java虚拟机将这些信息统统保存在数据区(data area)中。虽然每个Java虚拟机的实现中都包含数据区,但是Java虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了 Java虚拟机实现者自己发挥。不同Java虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他以下可能只占用很少的内存;一些实现可能会使用虚拟内存,而其它的则不使用。这种比较精炼的Java虚拟机内存规约,可以使得Java虚拟机可以在广泛的平台上被实现。 数据区中的一部分是整个程序共有,其他部分被单独的线程控制。每一个Java虚拟机都包含方法区(method area)和堆(heap),他们都被整个程序共享。Java虚拟机加载并解析一个类以后,将从类文件中解析出来的信息保存与方法区中。程序执行时创建的 对象都保存在堆中。 当一个线程被创建时,会被分配只属于它自己的PC寄存器“pc register”(程序计数器)和Java堆栈(Java stack)。当线程不调用本地方法时,PC寄存器中保存线程执行的下一条指令。Java堆栈保存了一个线程调用方法时的状态,包括本地变量、调用方法的 参数、返回值、处理的中间变量。调用本地方法时的状态保存在本地方法堆栈中(native method stacks),可能再寄存器或者其他非平台独立的内存中。 Java堆栈有堆栈块(stack frames (or frames))组成。堆栈块包含Java方法调用的状态。当一个线程调用一个方法时,Java虚拟机会将一个新的块压到Java堆栈中,当这个方法运行结束时,Java虚拟机会将对应的块弹出并抛弃。 Java虚拟机不使用寄存器保存计算的中间结果,而是用Java堆栈在存放中间结果。这是的Java虚拟机的指令更紧凑,也更容易在一个没有寄存器的设备上实现Java虚拟机。 总结:栈区是存放局部变量的。 方法区是存放类的类型信息,包括类的静态变量和方法 堆:存放类对象 **五、数据类型(Data Types) ** 所有Java虚拟机中使用的数据都有确定的数据类型,数据类型和操作都在Java虚拟机规范中严格定义。Java中的数据类型分为原始数据类型 (primitive types)和引用数据类型(reference type)。引用类型依赖于实际的对象,但不是对象本身。原始数据类型不依赖于任何东西,它们就是本身表示的数据。 所有Java程序语言中的原始数据类型,都是Java虚拟机的原始数据类型,除了布尔型(boolean)。当编译器将Java源代码编译为字节码时,使用整型(int)或者字节型 (byte)去表示布尔型。在Java虚拟机中使用整数0表示布尔型的false,使用非零整数表示布尔型的true,布尔数组被表示为字节数组,虽然它们可能会以字节数组或者字节块(bit fields)保存在堆中。除了布尔型,其它的原始类型都是Java虚拟机中的数据类型。在Java中数据类型被分为:整形的byte,short,int,long;char和浮点型的float,double。Java语言中的数据类型在任何主机上都有同样的范围。 在Java虚拟机中还存在一个Java语言中不能使用的原始数据类型----返回值类型(return value)。这种类型被用来实现Java程序中的“finally classes”,具体的参见“Finally Classes”。 引用类型可能被创建为:类类型(class type),接口类型(interface type),数组类型(array type)。他们都引用被动态创建的对象。当引用类型引用null时,说明没有引用任何对象。 范围代码 ![收藏代码][icon_star.png] 1. TypeRange 2. byte8-bit signed two's complement integer (-27 to 27 - 1, inclusive) 3. short16-bit signed two's complement integer (-215 to 215 - 1, inclusive) 4. int32-bit signed two's complement integer (-231 to 231 - 1, inclusive) 5. long64-bit signed two's complement integer (-263 to 263 - 1, inclusive) 6. char16-bit unsigned Unicode character (0 to 216 - 1, inclusive) 7. float32-bit IEEE 754 single-precision float 8. double64-bit IEEE 754 double-precision float 9. returnValueaddress of an opcode within the same method 10. referencereference to an object on the heap, or null 总结:原始数据类型和引用数据类型。boolean:0-false、非零整数-true **六、字节长度 ** Java虚拟机中最小的数据单元是字(word),其大小由Java虚拟机定义。但是一个字必须容纳byte、short、int、char、float、returnValue、reference;两个字必须足够容纳long,double。所以虚拟机的实现者至少提供的字不能小于31bits的字,但是最好选择特定平台上最有效率的字长。 在运行时,Java程序不能决定所运行机器的字长。字长也不会影响程序的行为,他只是在Java虚拟机中的一种表现方式。 总结:Java虚拟机中最小的数据单元是字 **七、类加载器子系统 ** [icon_star.png]: /images/20220716/0b2a30cf88184f9599f90b4f81f8fc0f.png
相关 深入理解Java虚拟机(JVM)工作原理 Java虚拟机(JVM)是Java语言运行的环境。它是操作系统与应用程序之间的抽象层,负责解释执行Java字节码。 以下是JVM工作原理的一些关键点: 1. **字节码生成 偏执的太偏执、/ 2024年09月14日 22:39/ 0 赞/ 7 阅读
相关 Java虚拟机JVM工作原理示例分析 Java虚拟机(Java Virtual Machine,简称JVM)是Java技术的核心部分,它负责执行Java字节码并管理相关的资源。 以下是JVM工作原理的一个示例分析 妖狐艹你老母/ 2024年09月12日 04:27/ 0 赞/ 23 阅读
相关 深入理解Java虚拟机(JVM)的工作原理 Java虚拟机(JVM)是运行Java程序的实体。它的工作原理可以分为以下几个主要部分: 1. **类加载**:JVM首先需要将源代码转换为字节码,这个过程由编译器完成。然后 落日映苍穹つ/ 2024年09月11日 16:21/ 0 赞/ 23 阅读
相关 java虚拟机工作原理 一、什么是Java虚拟机 Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,如处理器、堆栈、寄存器、还有 ╰半橙微兮°/ 2022年07月16日 09:08/ 0 赞/ 235 阅读
相关 Java虚拟机工作原理详解 一、类加载器 首先来看一下[Java][]程序的执行过程。 ![1356070838_2499.png][] 从这 末蓝、/ 2022年07月13日 23:49/ 0 赞/ 174 阅读
相关 Java虚拟机工作原理详解 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingduanlbd/article/details/8363734 一 比眉伴天荒/ 2022年04月13日 06:51/ 0 赞/ 200 阅读
相关 浅谈Java虚拟机工作原理 网上看了很多写JVM工作原理的大神,也看了些视频,各有各的理解,我整合一下组织自己的语言发表一下理解。。 首先来一段简单的代码示例: public class T 今天药忘吃喽~/ 2022年04月12日 04:26/ 0 赞/ 288 阅读
相关 Java虚拟机工作原理 <table style="margin:0px; padding:0px; border-collapse:collapse; border-spacing:0px; bor 太过爱你忘了你带给我的痛/ 2021年09月23日 03:08/ 0 赞/ 331 阅读
相关 JVM(java虚拟机)工作原理 在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生... 你的名字/ 2021年03月28日 15:51/ 0 赞/ 598 阅读
还没有评论,来说两句吧...