【Java核心面试题-1】谈谈对Java平台的理解 & Java的运行机制

目录

一、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环境。

猜你喜欢

转载自blog.csdn.net/wx1528159409/article/details/85682768
今日推荐