目录
JDK和JRE和JVM分别是什么?有什么关系?
什么是字节码,采用字节码的好处是什么 ?
Java 程序从源代码到运行的过程
为什么 Java语言"编译与解释并存"
Java 和 C++、Go 语言的区别,各自的优缺点?
首先JVM是Java虚拟机,专门用来运行字节码文件,JVM是实现Java跨平台的关键所在,JVM屏蔽了各种不同的操作系统之间的差异,使得同样的Java程序可以在不同的操作系统上运行出相同的结果.
JRE 是 Java运行时环境包含Java已经编译好必备的软件环境,包含了JVM,JRE只能运行程序,不能创建Java程序.
JDK 是Java开发者工具包,包含了JRE,JVM,调试分析等工具,用来创建和编译Java程序,如果想使用Java进行开发,那么就需要安装JDK.
三者的关系就是 : JRE包含JVM, JDK包含了 JRE,JVM
JVM能够理解并且能够运行的代码就是字节码. 字节码只面向虚拟机,不针对特定的一种机器.
字节码解决了传统解释性语言效率低的问题,同时也保留了传统解释性语言的可移植性,使得Java可移植性强实现跨平台,其次,不同的操作系统对应着不同的JVM,但是字节码是通用的,可以使得Java程序无需重新编译,就可以在不同操作系统上/平台上运行. 也就是所谓的 "一次编译,到处运行".
我们写的Java程序也就是.java文件会先使用Javac进行编译生成.class文件也就是字节码文件,然后会通过解释器逐行进行解释,但是当我们的方法/代码块多次执行这时这段代码会被认为是热点代码,于是就会交给Java即时编译器JIT来进行运行,经过JIT编译后会将字节码文件保存起来,当下一次使用的时候可以直接使用,这样的速度就会提升很多, JIT编译器属于运行时编译,经过解释器 & JIT即时编译器 进行解释/编译 最终会生成机器可以理解的机器码,然后交给机器来运行.
首先解释一下 什么是 "编译型语言" 和 "解释型语言"
"编译型语言" : 编译型语言是一次性的将源代码翻译成 机器所能理解的机器码,执行速度非常的快,但是开发效率比较低, 比如 C, C++, Rust
"解释型语言" : 解释型语言是每执行代码,一句一句的将源代码翻译成机器所能理解的机器码,执行速度满, 但开发效率比较高, 比如 JS, python.
为什么Java语言是 "解释与编译并存的" ?
Java语言是会先将源代码经过Javac进行编译成.class文件,也就是字节码,然后在通过 解释器&JIT来解释/编译生成平台所能理解的机器码,所以Java语言是解释与编译并存的.
参考 : Java基础常见面试题总结(上) | JavaGuide(Java面试+学习指南)
编程导航面试题部分 : 编程导航 - 做您编程路上的导航员