当前位置:首页 > 虚拟机 > 正文

浅谈如何理解java虚拟机(java虚拟机的缺点)

java虚拟机是什么?Java虚拟机是通过模拟软件在真实计算机上部署的虚拟机。Java虚拟机有自己的假想硬件,如处理器、堆栈、寄存器等。并且还有相应的引导系统。
Java虚拟机的特点
Java语言的一个非常重要的特点就是它的平台独立性。Java虚拟机的使用是实现这一功能的关键。一种通用的高级语言如果要运行在不同的平台上,至少必须编译成不同的目标代码。Java语言虚拟机诞生后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模型Java虚拟机屏蔽了与特定平台相关的信息,使得Java语言编译器只需要生成在Java虚拟机上运行的目标代码(字节码),无需修改即可跨平台运行。Java虚拟机执行字节码时,会将字节码解释为机器指令,以便在特定平台上执行。
Java虚拟机的主要用户
Java虚拟机是Java语言基本实现的基础。任何对Java语言感兴趣的人都应该对Java虚拟机有一个大致的了解。这有助于理解Java语言的一些属性,也有助于使用Java语言。对于想要在特定平台上部署Java虚拟机的软件工作者、Java语言编译器作者以及想要使用硬件芯片来部署Java虚拟机的人来说,必须对Java规范有深入的了解。虚拟机。另外,如果想要扩展Java语言或者将其他语言编译成Java语言字节码,也需要对Java虚拟机有深入的了解。
Java虚拟机支持的数据类型
Java语言中Java虚拟机支持的基本数据类型如下:
byte://1字节字节数有符号整数
Short://2字节有符号整数的补码
int://4字节有符号整数的补码
long://8字节有符号整数的补码
float://单精度浮点数IEEE7544字节
double://双精度浮点数IEEE7548字节
char://无符号2字节Unicode字符
几乎所有Java类型检查是在编译时完成的。属于上面列出的基本数据类型的数据在由Java执行时不需要进行硬件标记。操作这些原始数据类型的字节码(指令)本身表明了操作数的数据类型,例如iadd、ladd、fadd和dadd指令都是将两个数字相加,其操作数类型为int、long、float和double。虚拟机没有为布尔类型(Boolean)设置单独的指令。布尔数据使用整数指令进行处理,包括整数返回。布尔数组使用字节数组进行处理。虚拟机使用IEEE754格式的浮点数。不支持IEEE格式的旧计算机在运行Java数值计算程序时可能会非常慢。
虚拟机支持的其他数据类型包括
object//对Javaobject(对象)的4字节引用
returnAddress//4字节,用于jsr/ret/jsr-w/ret-w命令
注意:Java数组被视为对象。
虚拟机规范对对象的内部结构没有任何特殊要求。在Sun的实现中,对对象的引用是一个句柄,它包含一对指针:一个指向对象的方法表,另一个指向对象的数据。用Java虚拟机字节码表示的程序必须符合类型约定。Java虚拟机实现将拒绝执行违反类型规范的字节码程序。由于字节码定义的限制,Java虚拟机似乎只能在具有32位地址空间的机器上运行。但是您可以创建一个自动将字节码转换为64位形式的Java虚拟机。从Java虚拟机支持的数据类型可以看出,Java对数据类型的内部格式有严格的规定,使得Java虚拟机的不同实现以相同的方式解释数据,从而保证了Java平台独立性和便携性。

简述jvm的理解1、虚拟机和Java程序的生命周期
(1):程序正常执行后,进程结束
(2):()方法终止程序执行,输入参数为0,为正常退出
(3):异常或程序错误导致虚拟机进程终止
(4):操作系统错误导致虚拟机进程终止
2、类加载、连接和初始化
(1)加载:定位并加载磁盘上的.class文件(字节码文件、二进制数据)到内存中
(2)连接:
1.验证:检查加载的类的准确性
2.准备:为静态类变量分配内存并使用默认值初始化(此时a的值为0)
3.解析:转换类中的符号引用。可以直接参考
(3)初始化:给静态类变量赋正确的初始值(目前a的值为3)
publicclasstest{
privatestaticinta=3;
}
程序可以通过两种方式使用类:主动和被动。当Java程序“第一次主动使用”每个类或接口时,所有Java虚拟机实现都必须对其进行初始化。。

java虚拟机工作原理?环境变量设置为类路径和路径。
classpath指的是JVM要加载的类文件的路径,path指的是JVM工具箱的路径
当JVM加载一个类时,系统会分配一块区域​​虚拟机的数据内存在这个内存区域中,又分为三个小内存区域。
堆区存储该类的对象;方法区存储类类型信息,包括静态变量和类方法。栈区存放局部变量。
当加载一个类时,JVM首先会在方法区中存储所有的类类型信息。加载后会在方法区找到main方法并开始执行指令。