1. jdk 和 jre 的区别:
- jre 全称 java runtime environment 是 java 运行时环境,只包含 java 虚拟机和 java 基础类库这两个模块,是能够让 java 程序运行起来的最基本的模块。
- jdk 全称 java development kit 是 java 开发工具,不仅包含 jre 还包含了一系列开发工具和诊断工具。(举个例子?)
2. 为什么java 字节码叫做 java【字节】码?
因为在 java 字节码中一个指令的操作码被设计为占用 1 个字节。
3. 将 java 拆分为 java 语言上层和 java 虚拟机两部分的好处是什么?
- 可以给不同平台开发不同虚拟机,这样 java 上层语言开发者不需要关注平台不兼容问题,实现一次编写到处运行
- 虚拟机可以带来一个托管环境,能够帮助开发者解决诸如自动内存管理、安全检测(安全权限、数组越界)使得开发者可以更加专注于业务开发免于书写业务无关的逻辑
4. 为什么jvm 中存放 class 文件的地方叫做方法区而不叫类区?
因为类只是一种权限概念,运行时,方法才是基本单位。不论是 jvm 栈还是 jit 工具,他们的基本单位都是方法。方法是运行时的基本单位。class 文件是资源组织和权限管理的单位,跟package 有点类似。
5. java 程序有可能比 c++更快吗?
肯定有可能,java 程序也可以进行即时编译器,理论上 100%即时编译的 java 程序性能跟 c++可以持平,另外 jvm 虚拟机还掌握着程序运行时信息,可以根据实际运行情况来优化 java 程序,而 c++不能在程序开始运行后再利用运行时信息优化代码。