JVM
JVM是什么?
JVM是Java虚拟机,所有的Java程序都在Java虚拟机中运。jdk中有一个编译器,可以把你的java源代码编译成可以在虚拟机(jvm)上运行的字节码.
它是Java virtual Machine(Java虚拟机)的缩写,是一种计算设备的规范,它是一个虚拟出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java最重要的特性是与平台无关性(即其代码在不同的平台上运行不需要重新编译),使用java虚拟机是实现这一点的关键,Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JVM定义了控制java代码解释执行和具体实现的5种规格:
- JVM指令系统
- JVM寄存器
- JVM栈结构
- JVM碎片回收堆
- JVM存储区
JVM指令系统:
操作码和操作数组成;操作码是用于指定一条指令操作的性质,Java的8位操作码的长度使得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堆是共享的
JRE和JVM的区别
JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。