在学极客时间上Java核心36讲,这是每一讲对应的笔记。
问题
谈谈对 Java 平台的理解,Java是解释执行,这句话正确吗?
考点
扩散性问题,需要表现出自己的思维深入并系统化,Java 知识理解得也比较全面。
解析
Java 是一门面向对象语言,有跨平台和 GC 的特点。跨平台基于 JVM 实现“ write once,run anywhere”,GC 指的是不需要程序员考虑内存的分配和回收。
JRE(Java Runtime Environment)包括 JVM、Java 类库,提供 Java 程序的运行环境,JDK(Java Development Kit)包括 JRE 和更多如编译器、诊断工具等,提供给开发人员使用。
比如之前用 jmap dump 到处内存信息排查 Full GC 导致的 CPU 满载。
编译执行指的是边编译边执行,比如火锅边涮边吃;解释执行指的是先编译好,再执行,比如炒菜抄完了再吃。
Java 是解释执行语言,先将源代码通过 Javac 编译成字节码,再在运行时通过 JVM 的解释器转换为机器码。但也有编译执行的 JVM,如 Oracle JDk 的Hostpot JVM 提供了 JIT(Just In Time),在编译的时候生成机器码,即为编译执行。还有Oracle JDK 9 引入的实验性 AOT(Ahead of Time Compilation),在编译前生成机器码。
比如之前联调嫌每次改代码都重启项目很耗时,重写了 ClassLoader 实现了编译执行。
每一次成长,都想与你分享。