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

java虚拟机底层讲解


一、简述jvm工作原理Java是一项由四个方面组成的技术:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序编程接口(JavaAPI)。
运行环境代表Java平台。开发人员编写Java代码(.java文件),然后将其编译为字节码(.class文件),然后字节码被加载到内存中,并会被编译器解释并执行,或者有选择地转换为机器。代码由代码生成器实时执行。
Java平台是由Java虚拟机构建的,JavaAPI是该平台中的管道。用Java编写和编译的程序可以在这个平台上运行。
在Java平台架构中,可以看出Java虚拟机(JVM)处于软件的核心,是软件独立于操作系统和底层硬件的关键。下面是传输接口,它由两部分组成:适配器和Java操作系统,其中与平台相关的部分称为适配器;JVM通过上述传输接口在特定平台和操作系统上实现;JVM是Java基本类库和扩展类库及其应用程序编程接口(API)使用JavaAPI编写的Java应用程序可以在任何Java平台上运行,而无需考虑底层平台,因为Java虚拟机(JVM)与软件分离和。实现了操作系统,从而实现了Java平台无关性。
JVM在其生命周期中有一个明确的使命,那就是运行Java程序。因此,当Java程序启动时,会创建JVM实例,而当程序结束时,该实例也会消失。接下来我们将从结构和运行两个方面对JVM进行更深入的研究。
虚拟机架构
·每个JVM都有两种机制:
①类加载子系统:加载包含具有适当名称的类或接口
②执行引擎:负责执行加载的类或接口中包含的指令
·每个JVM包含:
方法区、Java堆、Java栈、本地方法栈、指令计数器以及其他隐式寄存器
2Java代码的编译和执行过程大致相同:开发人员编写Java代码(.java文件),将其编译为字节代码(.class文件),然后安装字节码一旦进入虚拟机,就会被编译器解释执行,或者被实时代码生成器选择性地转换成机器码来执行。
(1)Java代码编译是由Java源代码编译器完成的,即将Java代码转换为JVM字节码(.class文件)的过程。
2)Java字节码执行由JVM执行引擎完成
Java代码编译执行的整个过程涉及到以下三个重要机制:
·代码编译机制干源码...
·章节加载机制
·章节执行机制
(一)代码编译机制Java源码
编译Java源码由以下个操作组成:
①解析并插入符号表
②注解处理
③语义分析和类文件创建
最终生成的类文件由以下部分组成:
①结构信息:包括class文件的格式版本号和编号以及各部分的大小等信息
②元数据:Java源代码中的声明和常量对应的信息。它包含声明信息、字段和方法声明信息以及一组固定的继承类/超类/实现接口
③方法信息:对应Java源代码中数据和表达式对应的信息。包含字节码、异常处理表、求值栈、局部变量区大小、求值栈类型寄存器、调试代码信息
(2)类加载机制JVM类通过ClassLoader及其子类进行加载去完成


二、20条必背java知识点学生考专必备

要写下的20件事记住Java知识

1.编写:编写的Java代码保存在扩展名为“java”的源文件中。

2.编译:使用命令编译java源文件,生成字节码文件。格式:源文件名

3.运行:使用命令解释并运行字节码文件。格式:java类名

4.一个java源文件中可以声明多个类,但是最多只能声明一个类为public,并且声明为public的类的类名必须与源文件名相同。

5java关键字中的所有字母都是小写

中的命名约定:包名:由多个单词组成时,所有字母均小写:类名xxxyyyzzz,接口名:由多个单词组成时,全部首字母大写:变量名XxxYyyZzz。

属于一个类,是一个引用数据类型

8.在类体中,在方法外部声明的变量称为成员变量。

9.在方法体内声明的变量称为局部变量。除了形式参数之外,局部变量在使用之前必须显式初始化。(形参也是局部变量)

10Java的整型常量默认是int类型。声明long类型常量时,必须在其后面添加“'或”L'。

11、Java的浮点常量默认为double类型。要声明浮点常量,请在其后添加“f”或“F”。

中的所有字符都使用Unicode。一个字符可以存储一个字母和一个汉字,所以Java中的char类型是两个字节。

n数据只许true和false值,不允许null。您不能使用零或非零整数来代替false和true。Java虚拟机中没有专门用于布尔值的字节码指令。Java语言处理的布尔值在编译后被Java虚拟机中的int数据类型取代:true用1表示,false表示。是用0来表示的..

14.虽然long类型是8字节,float类型是4字节,但是float类型是以科学计数法存储的,所以float类型的存储范围比long类型要大。

15.自动类型转换:小容量类型自动转换为大容量数据类型。Byte、short和char之间不互相转换,计算时先转换为int。

16.强制类型转换:将大数据类型转换为小数据类型,但这可能会降低或溢出精度。

不能直接转换为基本类型,但是可以通过基本类型对应的包装类将String转换为基本类型。

18.计算机底层以二进制补码形式存储数据。

19.正数(最高位为0)的原码、补码和补码是相同的,负数(最高位为1)的补码是其+1补码。。

20。赋值运算符:==+=-=*=/=%,运算结果不会改变变量本身的数据类型。短i=i+1;由于常量“1”默认是int类型,编译会报错。使用shorti+=1可以在不改变数据类型的情况下有效地实现+1。