跨平台的概念

2026-07-18

"Write once, run anywhere"


前言

Java 语言的一个核心优势就是跨平台性,那么究竟什么是跨平台性?为什么 Java 能实现跨平台,其他语言的解决方案又是什么?


跨平台

平台(Platform)可以指的是是硬件(CPU)平台,也可以是软件(OS)平台。硬件层面,CPU 有 ARM 架构和 X86 架构以及 RISC-V 架构,软件层面,操作系统有 Windows、Linux、MacOS、Android、iOS 等等。

不同的硬件平台和软件平台还会有组合关系,比如 Windows 可以运行在 ARM 或者 x86 架构的处理器平台上。

不同操作系统的底层调用都是不同的,比如 Linux 和 Windows,这两个操作系统底层的多线程模型,文件、网络都不一样,如果开发者需要为所有平台的组合选项,编写平台独立的代码,工作量是很大的,所以出现了跨平台(Cross-Platform)这个概念。

源码级跨平台

对于 C、C++、Go、Rust 这些编译型语言来说,它们能做到同一份源码,经过不同平台编译后运行,以 C 为例,在 Linux 环境下编译成 ELF 格式的二进制,在 Windows 下编译成 exe 二进制文件,Go、Rust 这种现代语言,交叉编译做得很完善,可以在一个平台下交叉编译成别的平台的二进制文件。

假如有三个不同的平台,那么编译型语言就要针对三个平台编译出三个二进制程序,才能放到各个平台放上运行。

它们最终都是需要把相同的源码,构建成对应平台能够运行的机器码才可以执行,它们对于平台的适配阶段发生在编译期间。

解释器跨平台

以 Python 为代表的解释型语言,它的跨平台不是编译,而是在不同的平台下安装对应的解释器,然后把编写好 py 文件放到对应平台的解释器下运行。

假如有三个不同的平台,那么解释型语言,就需要在三个平台上安装对应的解释器,然后分发 py 源码,由对应平台的解释器解释执行。

Python 对于平台的适配阶段发生在解释器层面。

虚拟机跨平台

本文介绍的 Java 就是虚拟机级别的跨平台,Java 的虚拟机 JVM 为大部分平台做了适配,每个平台都有自己的 JVM,Java 源码经过编译生成字节码(class 文件)文件,就可以被 JVM 载入执行。

加入有三个不同的平台,需要为这三个平台安装对应的 JVM 虚拟机,然后分发经过编译后的 class 文件(或者 class 文件打包后的 jar 包),由对应平台的 JVM 虚拟机载入执行。

Java 对于平台的适配阶段发生在虚拟机层面。


参考

  1. https://en.wikipedia.org/wiki/Write_once,_run_anywhere
  2. https://en.wikipedia.org/wiki/Cross-platform_software#Platforms