【Java核心面试题-1】谈谈对Java平台的理解 & Java的运行机制,java-1
【Java核心面试题-1】谈谈对Java平台的理解 & Java的运行机制,java-1
目录
一、Java的发展过程
二、Java的主要特性
(1)最显著的特性有两个方面:
(2)Java的其他特性:
三、Java的两大主要模块
四、Java运行机制(一次编码,一次解析,两次编译)和优化技术
一、Java的发展过程
从JDK5开始,JDK5(重写Bug)、JDK6(商用最稳定版本)、JDK7(switch的字符串支持)、JDK8(函数式编程)
二、Java的主要特性
Java本身是一种面向对象的语言,
(1)最显著的特性有两个方面:
(1)write once,run anywhere 即“书写一次,到处运行”,说的是java语言的跨平台性
(2)垃圾收集机制GC,Garbage Collection;GC自动回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。
(2)Java的其他特性:
(1)java面向对象三大特性:封装、继承和多态
(2)平台无关性,核心是JVM运行.class文件
(3)java语言新特性:泛型和Lambda等
(4)基础类库:集合、IO/NIO、网络、并发(J.U.C并发包)、安全等基础类库
(5)Java的类加载器,常用版本如JDK8内嵌的Class-Loader,例如Bootstrap、Application和Extension Class-loader都是我们常用的类加载器,还有自定义的Class-Loader等。
(6)Java的类加载机制,大致过程是:加载、验证、链接、初始化(参考《深入理解Java虚拟机》)
(7)常用的GC垃圾收集器:SerialGC、Parallel GC、CMS、G1等
(8)JVM的内存模型:堆、栈、方法区等
三、Java的两大主要模块
(1)JRE(Java Runtime Environment):Java运行环境,关键在于运行编译好的java程序
包括:JVM、java核心类库、一些其他模块
ps:JVM主要有三种,JVM for Windows、Linux、Unix,分别对应三种操作系统的JVM
(2)JDK(Java Development Kit):Java开发工具包,关键在于开发和编译java程序
包括:JRE、javac编译器、诊断工具、java基础类库
ps:JDK可以看做是JRE的一个超集,提供了更多工具;java的常用类库有11个jar包和各种扩展类,其中java.lang和java.until是最常用的类库;附上两篇相关文章如下
Java基础类库简介
JDK、JRE、JVM三者间的关系
ps:类库(Library):一堆jar包的集合
jar包:一堆类的集合
ps:补充一下API的概念
API(Application Programming Interface):应用编程接口,是为了实现特定功能所预先写好并封装的类,这样我们需要实现某种功能时,直接调用API即可,而不再需要去理会功能类的内在逻辑,方便工作。
注意这个接口指的是两个软件之间连接的接口,意指两个不同软件可以通过API连接起来,与java中接口类Interface不是一个概念!
四、Java运行机制(一次编码,一次解析,两次编译)和优化技术
Java是解释执行,这种说法对吗?
其实这个说法不太准确,Java代码从编译到运行的过程是这样的:
(1)开发期,编码阶段,编写Java源码
(2)编译期—Javac第一次编译,通过Javac编译器编译成.class文件(字节码文件),
(3)编译期—JVM解析,通过JVM内嵌的解释器(类加载器)解析.class文件
(4)编译期—JVM第二次编译,
① JIT编译器(即时编译器),把经常运行的代码作为热点代码,编译成与平台相关的机器码,并进行各种层次优化
② AOT编译器,直接将所有代码编译成平台相关的机器码
(5)运行期,运行机器码文件
Java优化技术:JIT和AOT,若JVM加载.Class文件后,直接解释执行,势必会影响效率;JVM提供了两种编译器,用于编译执行:
JIT优化技术,将常用的代码编译成机器码
AOT优化技术,在运行前,通过工具直接将字节码转换成机器码
这个过程看起来是解释执行,但忽略了一种情况,比如我们大多数情况下使用的JVM,都提供了JIT(Just-In-Time)编译器,也就是动态编译器,JIT能在运行时将热点代码编译成机器码,所以这种情况下部分热点代码就属于编译执行,而不是解释执行。
所以目前主流的JDK8版本,Java执行模式其实是解释-编译的混合模式(-Xmixed)
ps:通过这个Java的运行过程可以看出,实现Write once,Run anywhere的两大核心:.Class字节码文件和不同系统JVM对应的解释器,Java语言可以跨平台,本质是不同平台都有可以让Java语言运行的JVM环境。
相关文章
- 暂无相关文章
用户点评