1、我认识中的 JAVA是怎么样子的?
JAVA是一种面向对象的语言,比较显著的两个特性是:
1.1、跨平台能力(java是运行在JVM虚拟机上,不依赖于具体的平台环境)
1.2、垃圾收集器(无需程序员去关注内存分配与回收,跟去饭店吃饭一样,不需要和家里一样吃饭还得洗碗收拾餐具~)。
2、JRE、JDK的全称是什么?它两有什么关系?
笔者在去找实习工作那会被面试官问及该问题:不记得当时是怎么忽悠过去的,应该没答对~然后就没有然后了,哈哈~
JRE的全名是 Java Runtime Environment ,也就是JAVA运行环境,包含了JVM和java类库,以及一些模块等。
JDK的全名是Java Development kit,可以看作是JRE的一个超集,提供了更多工具,比如编译器、各种诊断工具等。
3、JAVA的执行过程是什么样子的?是解释执行吗?
做位一个还未 聪明绝顶的程序员(也快了,最近老掉发),这类比较抽象的问题对于我们这种show me the code类型的程序员来说,是比较难以回答的上。所以如果面试这种问题一般都给他来个“全套”。首先①程序员编写JAVA类,②通过javac编译成为字节码(bytecode)也就是打包后的class文件,然后在运行时,通过java虚拟机(JVM)内嵌的解释器将字节码转换成位最终的机器码。看起来时解释执行的过程,貌似这么理解也没毛病。
但是常见的JVM,比如我们大多数情况使用的oRACLE JDK提供的Hotspot JVM,都提供了JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了