面试官:JDK、JRE、JVM 三者什么关系?
关注“Java后端技术全栈”**
回复“面试”获取全套大厂面试资料
这个题目在面试题中基本没怎么出现,但在笔试题中倒是经常见到。所以还是有必要拉出来溜溜~
JDK: java development kit, java开发工具包,用来开发Java程序的,针对java开发者。
JRE: java runtime environment, java运行时环境,针对java用户
JVM: java virtual machine,java虚拟机 用来解释执行字节码文件(class文件)的。
JDK
JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE。开发工具如:
用于编译 Java 程序的 javac 命令。
用于启动 JVM 运行 Java 程序的 Java 命令。
用于生成文档的 Javadoc 命令。
用于打包的 jar 命令等等。
简单说,就是 JDK 包含 JRE 包含 JVM。
JRE
JRE 即为 Java 运行环境,提供了运行 Java 应用程序所必须的软件环境,包含有 Java 虚拟机(JVM)和丰富的系统类库。系统类库即为 Java 提前封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。
简单说,就是 JRE 包含 JVM。
JVM
JVM 即为 Java 虚拟机,提供了字节码文件(.class
)的运行环境支持。
JDK > JRE > JVM
扩展题1:为什么 Java 被称作是“平台无关的编程语言”?
Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。
Java 源文件(
.java
)被编译成能被 Java 虚拟机执行的字节码文件(.class
)。Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
扩展题2:JDK 各版本的新特性?
JDK5 ~ JDK10 ,看:https://www.jianshu.com/p/37b... 。
JDK11 ,看:https://www.jianshu.com/p/81b... 。
对于大多数面试官,肯定不会问你 JDK 各版本的新特性,更多的会问 JDK8 引入了什么重要的特性?一般上,关键的回答是Lambda 表达式和集合之流式操作,然后说说你在项目中怎么使用的。
扩展题3:Java 和 C++ 的区别?
都是面向对象的语言,都支持封装、继承和多态。
Java 不提供指针来直接访问内存,程序内存更加安全。
Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
Java 有自动内存管理机制,不需要程序员手动释放无用内存。
推荐阅读
面试问你Spring如何解决循环依赖的时候,不要一脸懵逼了!
版权声明: 本文为 InfoQ 作者【田维常】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f2758574cc8febebd5df1cd4】。文章转载请联系作者。
评论