浅谈JVM

JVM

JVM是什么?

JVM是Java虚拟机,所有的Java程序都在Java虚拟机中运。jdk中有一个编译器,可以把你的java源代码编译成可以在虚拟机(jvm)上运行的字节码.

它是Java virtual MachineJava虚拟机)的缩写,是一种计算设备的规范,它是一个虚拟出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java最重要的特性是与平台无关性(即其代码在不同的平台上运行不需要重新编译),使用java虚拟机是实现这一点的关键,Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

JVM定义了控制java代码解释执行和具体实现的5种规格:

  • JVM指令系统
  • JVM寄存器
  • JVM栈结构
  • JVM碎片回收堆
  • JVM存储区 

JVM指令系统:

操作码和操作数组成;操作码是用于指定一条指令操作的性质,Java8位操作码的长度使得JVM最多256种指令,已使用了160多种操作码。JVM采用了“big endian”的编码方式操作数,即高位bits存放在低字节中

JVM寄存器

虚拟机定义较多的寄存器,则可以得到更多信息而不需要去访问栈和内存,有利于提高运行速度,但是寄存器太多反而会降低速率,所以JVM只设置了4个最为常用的寄存器:pc程序计数器(用于记录程序的执行)、optop操作数栈顶指针、frame房钱执行环境指针、vars指向当前执行环境中的第一个局部变量的指针

JVM栈结构

Java栈是JVN存储信息的主要方法,JVM为代码中的类的每一个方法创建一个栈框架,保存此方法的状态信息,栈框架内容:

l 局部变量:用于村塾方法中所用到的局部变量

l 执行环境:用于保存解释器对代码进行解释过程中所需要的信息

l 操作数栈:用于存储运算时所需要的操作数和运算结果

JVM碎片回收堆

Java类的实例所需的存储空间是在对上分配的,解释器承担此工作,解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。一旦对象使用完毕,便将其回收到堆中。

JVM存储区

它有两类存储区:常量缓冲池方法区

常量缓冲池用于存储类名称、方法和字段名称以及串常量。方法区则用于存储Java方法的字节码

谈谈JVM栈和JVM堆吧!

JVM堆中存的是对象。JVM栈中存的是基本数据类型和JVM堆中对象的引用。

JVM栈是运行时的单位(怎么运行、处理),而JVM堆是存储的单位(怎么存储)

Java中不同的线程会有自己独立的JVM栈,但是JVM堆是共享的

JREJVM的区别

JRE(JavaRuntimeEnvironmentJava运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。

JVM(JavaVirtualMachineJava虚拟机)JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。

猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/80067903