1. 谈谈你对Java平台的理解。java
Java是一种面向对象的语言,最显著的特性有两个方面:程序员
一个就是一次编译,处处运行(Write once, run anywhere),可以很是容易的得到跨平台能力;编辑器
另外一个就是垃圾收集(GC,Garbage Collection),Java经过GC回收分配内存,大部分状况下程序员不须要操心内存的分配和回收;工具
什么是JRE(Java Runtime Environment)/JDK(Java Development Kit)?性能
JRE:java运行环境,包含了JVM,Java内裤,以及一些模块;优化
JDK:JRE的一个超集,提供了更多工具,好比编辑器、各类诊断工具;操作系统
JVM < JRE < JDK对象
2. Java是解释执行,这句话正确么?blog
Java是解释执行,这个说法不太准确。咱们开发java的源代码,经过Javac编译成字节码,而后在运行时经过JVM内嵌的解释器将字节码转换为最终的机器码。内存
可是常见的JVM(Oracle JDK 提供的Hotspot JVM),都提供了动态编译器JIT(Just in Time),JIT可以在运行时将热点代码编译成机器码,这种状况下部分热点代码就属于编译执行,而不是解释执行。
如图Java是分为编译器和运行时。java的编译生成的是字节码,而不是能够直接执行的机器码。Java经过字节码和JVM这种跨平台的抽象,屏蔽了操做系统和硬件的细节,这也是“一次编译,处处执行的基础”。
JVM启动时能够指定不一样的参数对运行模式进行选择,例如:
-Xmixed:解释和编译混合模式;
-Xint:只进行解释执行,不对代码进行编译,抛弃JIT可能带来的性能优点;
-Xcomp:关闭解释器或者叫作最大优化级别。但这种模式并不必定是最高效的,他会致使JVM启动变慢,同时有些JIT编译器优化方式,如分支预测,若是不进行profiling,每每不能进行有效优化。
AOT(Ahead-of-Time Compilation):直接将字节码编译成机器代码,避免了JIT预热等各方面的开销。在Oracle JDK 9 引入了实验性的AOT特征,并增长了新的jaotc工具;