谈谈 java(4) :Java平台的理解

223 阅读3分钟

这是我参与更文挑战的第25天,活动详情查看: 更文挑战

前言

学习 java 这么久,我们从敲 hello world 开始的那天,对 java 的最直观印象便是它的跨平台能力,即一次编译,多次执行。这就是 java 通过 jvm 虚拟机来实现的平台无关性,可以部署到不同的平台。有点类似华为的鸿蒙系统可以部署到多个平台应用上。今天,我们来聊聊 java 平台。

一、java 的跨平台

两次编译:

而 实现 java 跨平台的 重要角色就是jvm 虚拟机,通过它可以对不同的硬件进行兼容,java 程序在经过编译之后,生成的 .class 字节码文件可以在任何转载了 jvm 虚拟机的平台上执行,然后通过 JVM 内嵌的解析器将字节码转换成最终的机器码,同时,jvm 也帮我们做了内存的分配和回收。

编译or解析

注意的是,java 不是 编译机制,也不完全是解释机制, 因为java 字节码的设计充分考虑了 JIT 这个即时编译方式,混合了解析执行 + 编译执行混合型,一般 JVM 是直接解析执行 .class 文件,当出现高频代码时 JVM 就通过 JIT 即时编译器把经常运行的代码作为“热点代码”编译为本地平台相关的机器码,并进行各种层次的优化。

AOT:

新的编译方式,AOT(Ahead-of-Time Compilation),直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,比如 Oracle JDK 9 就引入了实验性的 AOT 特性,并且增加了新的 jaotc 工具。利用下面的命令把某个类或者某个模块编译成为 AOT 库。

二、java 平台的理解?

java 平台 的含义可以分为几个方面来看:

  • java 语言特性
  • java 类库
  • java 虚拟机 及工具
  • java 生态(spring、hadoop等框架)

java 平台的理解就是你对这个java 世界观的理解,这里可以从这四个方面阐述这个问题,例如 java 语言特性,它包括 泛型、反射、Lambda等语言特性;java 类库 例如集合、网络、并发等基础类库;jvm 虚拟机的类加载和过程和垃圾回收过程等;java 生态就更多了。

三、总结

3.1 执行步骤

  • 1、Java源代码经过Javac编译成.class文件

  • class文件经JVM解析或编译运行。

    • (1)解析:.class文件经过JVM内嵌的解析器解析执行。

    • (2)编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为"热点代码"编译与本地平台相关的机器码,并进行各种层次的优化。

    • (3)AOT编译器: Java 9提供的直接将所有代码编译成机器码执行。

3.2 Java平台

  • 语言(泛型,Lambda)

  • 类库(集合,并发,网络,IO/NIO)

  • java虚拟机及工具

    • JRE(Java运行环境,JVM,类库)
    • JDK(Java开发工具,包括JRE,javac,诊断工具)
  • java 生态及框架

image-20210624181505191

本文参考:

  • 《java 核心技术36讲》