Java虚拟机

Java虚拟机,第1张

定义
  • Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一,通过在实际的计算机上仿真或者模拟各种计算机功能来实现的。

  • Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现,有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

  • Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。

  • Java虚拟机规范定义了一个抽象的——而非实际的——机器或处理器,一旦一个Java虚拟机在给定的平台上运行,任何Java程序(编译之后的程序,称作字节码)都能在这个平台上运行。

系统特点

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译,就可以在多种平台上不加修改地运行,Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

使用主体

Java虚拟机是Java语言底层实现的基础。这有助于理解Java语言的一些性质,也有助于使用Java语言。另外,如果你想扩展Java语言,或是把其它语言编译成Java语言的字节码,你也需要深入地了解Java虚拟机。

数据类型

Java虚拟机支持Java语言的基本数据类型有8种

注意String不是基本数据类型

byte 1个字节

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数;

  • 最小值是 -128(-2^7);

  • 最大值是 127(2^7-1);

short 2字节

  • short 数据类型是 16 位、有符号的以二进制补码表示的整数

  • 最小值是 -32768(-2^15);

  • 最大值是 32767(2^15 - 1);

int 4字节

  • int 数据类型是32位、有符号的以二进制补码表示的整数;

  • 最小值是 -2,147,483,648(-2^31);

  • 最大值是 2,147,483,647(2^31 - 1)

long 8字节

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;

  • 最小值是 -9,223,372,036,854,775,808(-2^63);

  • 最大值是 9,223,372,036,854,775,807(2^63 -1);

float 4字节

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;

  • float 在储存大型浮点数组的时候可节省内存空间;

  • 默认值是 0.0f;

double 8字节

  • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;

  • 浮点数的默认类型为 double 类型;

  • double类型同样不能表示精确的值,如货币;

boolean 1字节

  • boolean数据类型表示一位的信息;

  • 只有两个取值:true 和 false;

  • 这种类型只作为一种标志来记录 true/false 情况;

  • 默认值是 false;

char 2字节

  • char 类型是一个单一的 16 位 Unicode 字符;

  • 最小值是 \u0000(十进制等效值为 0);

  • 最大值是 \uffff(即为 65535);

  • char 数据类型可以储存任何字符;

寄存器

Java虚拟机的寄存器用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。

Java虚拟机的寄存器有四种:

  • pc:Java程序计数器

  • optop:指向 *** 作数栈顶端的指针

  • frame:指向当前执行方法的执行环境的指针。

  • vars:指向当前执行方法的局部变量区第一个变量的指针。

栈有三个区域:局部变量区、运行环境区、 *** 作数区。

1、局部变量区 每个Java方法使用一个固定大小的局部变量集,它们按照与vars寄存器的字偏移量来寻址。局部变量都是32位的。

2、运行环境区 在运行环境中包含的信息用于动态链接,正常的方法返回以及异常传播

3、 *** 作数栈区机器指令只从 *** 作数栈中取 *** 作数,对它们进行 *** 作,并把结果返回到栈中,每个原始数据类型都有专门的指令对它们进行必须的 *** 作。每个 *** 作数在栈中需要一个存储位置,除了long和double型,它们需要两个位置。 *** 作数只能被适用于其类型的 *** 作符所 *** 作。

为了保证类文件的平台无关性,Java虚拟机规范中对类文件的格式也作了详细的说明。其具体细节请参考Sun公司的Java虚拟机规范。

查看反汇编字节码

Java 开发工具包(JDK)中的工具 javap.exe 可以显示 java.class 文件的字节码,这个 *** 作被称为文件的反汇编

 javap -c classname

 若类文件名为 Account.class,则相应的 javap 命令行为:
 javap -c Account

安装 Java 开发工具包后,可以在 \bin 文件夹下找到 javap.exe 工具

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/924524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存