今天我要问你的问题是, 谈谈你对 Java 平台的理解?"Java 是解释执行", 这句话正确吗?
典型回答
Java 本身是一种面向对象的语言, 最显著的特性有两个. 一是所谓的 "书写一次, 到处运行", 能够非常容易获得跨平台能力; 另一个就是垃圾收集, Java 通过垃圾收集器回收分配内存, 大部分情况下, 程序员不需要自己操心内存的分配和回收.
我们日常接触到 JRE( Java Runtime Environment) 或者 JDK( Java Development Kit).JRE 也就是 Java 运行环境, 包含了 JVM 和 Java 类库, 以及一些模块等. 而 JDK 可以看作是 JRE 的一个超集, 提供了更多工具, 比如编译器, 各种诊断工具等.
对于 "Java 是解释执行" 这句话, 这个说法不太准确. 我们开发的 Java 的源代码, 首先通过 Javac 编译成字节码 (bytecode) , 然后, 在运行时, 通过 JVM 内嵌的解释器将字节码转换为最终的机器码. 但是常见的 JVM, 比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM, 都提供了 JIT (Just In Time) 编译器, 就是常说的动态编译器, JIT 能够在运行时将热点代码编译成机器码, 这种情况下热点代码就属于编译执行, 而非解释执行了.
首先 javac 编译器将源代码编译成字节码。 |
然后 jvm 类加载器加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度相对 |
会比较慢。有些方法和代码块是高频率调用的,也就是所谓的热点代码,所以引进 jit 技术, |
提前将这类字节码直接编译成本地机器码。这样类似于缓存技术,运行时再遇到这类代码直 |
接可以执行,而不是先解释后执行。 |
----
回归正题, 对于 Java 平台的理解, 可以从很多方面简明扼要地谈一下, 例如: Java 语言特性,
包括泛型, Lambda 等语言特性; 基础类库, 包括集合, IO/NIO, 网络, 并发, 安全等基础类
库. 对于我们日常工作应用较多的类库, 面试前可以系统化总结一下, 有助于临场发挥
或者谈谈 JVM 的一些基础概念和机制, 比如 Java 的类加载机制, 常用版本 JDK(如 JDK 8)
内嵌的 Class-Loader, 例如 Bootstrap, Application 和 Extension Class-loader; 类加载大
致过程: 加载, 验证, 链接, 初始化 (这里参考了周志明的《深入理解 Java 虚拟机》, 非常棒
的 JVM 上手书籍); 自定义 Class-Loader 等. 还有垃圾收集的基本原理, 最常见的垃圾收集
器, 如 SerialGC,Parallel GC, CMS, G1 等, 对于适用于什么样的工作负载最好也心里有
数. 这些都是可以扩展开的领域, 我会在后面的专栏对此进行更系统的介绍
当然还有 JDK 包含哪些工具或者 Java 领域内其他工具等, 如编译器, 运行时环境, 安全工具,
诊断和监控工具等. 这些基本工具是日常工作效率的保证, 对于我们工作在其他语言平台上, 同
样有所帮助, 很多都是触类旁通的.
来源: http://www.bubuko.com/infodetail-3045460.html