极客时间杨晓峰-Java核心技术36讲-笔记记录
第1讲:谈谈你对Java平台的理解?
如果我被问到这个问题,我会从Java的跨平台特性、垃圾回收器、面向对象特性、语言特性、常用类库、jre与jdk等几个方面来回答这个问题。
关于跨平台特性:”一次编译,多次运行”是跨平台特性的体现,程序从源代码到运行的三个节点:编码–编译–运行,Java在编译阶段体现了跨平台的特性,
首先将ava源代码转化成.class文件字节码,这是第一次编译,.class文件就是可以到处运行的文件,然后Java字节码会通过JVM被转换为目标机器代码,
这是由JVM来执行的,即Java的第二次编译。一次编译,到处运行的关键和前提。JVM屏蔽了操作系统的底层细节,使得开发者无需过多考虑
不同操作系统之间的差异性。
由此引申出一个问题,Java是编译运行还是解释运行?实际上Java通过javac编译器将源代码编译(这里的编译不同与传统的编译概念,传统的编译是指将源码一次性直接转换为机器码)成字节码,然后由JVM类加载器加载字节码文件,通过解释器逐行解释,一直到这里Java都只是出现了解释执行。但是有些方法和代码块是高频率调用的,也就是所谓的热点代码,所以又出现了JIT运行时编译技术,运行时把类字节码动态编译成本地机器码,类似于缓存技术,下次运行时可以直接执行,不用再逐行解释了,提高了执行效率。因此Java是两种方式结合使用的。进一步引申,引进AOT直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,因为JIT是运行时才做的,需要预热才知道哪些是热点;AOT是编译期进行的,直接编成类似类库的东西。
关于垃圾回收,降低了开发过程中需要注意内存回收的难度,降低内存泄露出现的概率。
其他方面也可以扩展开来说很多东西,面试问这个问题一般就是开场热身,可以挑自己最熟悉的说。
面向对象(封装,继承,多态)。
语言特性(泛型,Lambda)
类库特性(集合,并发,网络,IO/NIO)
JRE(Java运行环境,JVM,类库)
JDK(Java开发工具,包括JRE,javac,诊断工具)