关于JVM虚拟机的知识点

JVM全称叫做Java Virtual Machine,翻译为Java虚拟机,
是Java语言运行的平台。

1、编程语言的发展历史
第一代:机器语言 由0和1组成的二进制指令
第二代:汇编语言 指令有了英文名字 mov add jmp loop…
第三代:高级语言 C、C++、C#、Java、Python、PHP…
第四代:SQL语言
无论是哪一种编程语言、哪一代的编程语言,最终都是要直接或间接地翻译成机器语言交给CPU执行。
CPU除了0和1,别的什么都不认识。

C语言为什么需要编译?C的源代码我们能看懂,但是CPU看不懂。
想要交给CPU去执行,就必须得翻译成它能理解的内容(二进制指令–机器码)。

2、字节码、JVM和CPU的关系

Bytecode 要运行的Java代码

JVM 作用就是把16进 制的字节码(Bytecode)翻译成CPU能理解的二进制指令(机器码)。
JVM在Java代码和CPU之间充当一个翻译的角色,
翻译的过程就叫做解释执行。

CPU 中央处理器

3、Java程序完整地运行流程
1)第一步
编写.java后缀的源代码文件(source file)
问题:Java的源代码直接运行在CPU上? ----不行
2)第二步
使用javac编译器,将.java源文件进行编译
如果语法没有错误的话,则编译成功,
会生成.class为后缀的字节码文件(类文件、bytecode)
生成的.class文件名和.java文件名是相同的。
问题:字节码文件能不能直接运行在CPU? ----不行
CPU只能直接运行0和1组成的二进制机器码。
【注意】字节码和机器码不是一回事

3)第三步
直接使用java.exe程序运行Java类。
这一步操作在我们看来好像是在直接运行.class文件,
但是其实不是。
这一步实际上是把生成的.class文件交给了Java虚拟机。
由Java虚拟机把字节码逐字逐句地翻译成机器指令,交给CPU运行。
这个过程,就叫解释执行过程。

4)编译型语言和解释型语言的区别
编程语言分为编译型语言和解释型语言。
编译型语言:
源代码不能直接运行。
通常存在一个编译器,能够把一整篇的源代码一次性翻译成一整篇的机器码。
而且会把翻译的结果保存在一个文件中。
接下来就可以直接把这个文件交给CPU运行。
典型代表:C语言
对语法要求极为严格,只要有一点语法错误,整篇编译都会失败。

解释型语言:
	无需编译,源代码就可以直接运行。
	注意,不是把源代码直接交给CPU运行。
	解释型语言都有对应的解释器,
	解释器的作用就是可以逐字逐句地读取源代码,
	一边读取,一边翻译成机器码交给CPU执行。
	边读、边翻译、边执行。
	不会把翻译的机器码结果保存到一个文件中。
	典型代表:JS
	对语法要求不那么严格。

【思考】Java语言属于编译型语言还是解释型语言?
Java语言属于半编译半解释型语言。
虽然java语言需要编译,但是不像C语言那样直接把源代码翻译成机器码。
java编译器把java源代码翻译成字节码,字节码是不能直接交给CPU执行的。
字节码需要再交给JVM解释执行。

5)Java到底是如何实现的跨平台?

因为JVM是不跨平台的,所以才能让源代码和字节码跨平台。
因为SUN公司开发了很多不同版本的JVM虚拟机,分别对应不同的操作系统。
不同版本的JVM能够把相同的字节码文件翻译成不同操作系统中的机器码运行。
我们编写的源代码是相同的,经过javac编译生成的字节码也是相同的。
不同操作系统中的JVM能够把相同的.class字节码文件翻译成对应平台不同的机器码运行。

HelloWorld.java —javac—> HelloWorld.class
如果在Windows中运行,windows版本的JVM就能把HelloWorld.class翻译成Windows系统能看懂的机器码执行。
如果在Linux中运行,Linux版本的JVM就能把HelloWorld.class翻译成Linux系统能看懂的机器码执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值