01 - 简介:Java 历史、JVM 生态、适用场景
01 - 简介:Java 历史、JVM 生态、适用场景
Java 的诞生与发展
Java 由 James Gosling 于 1995 年在 Sun Microsystems 开发,最初名为 Oak(橡树),后更名为 Java(源自印尼爪哇岛的咖啡)。Java 的设计目标是:
“Write Once, Run Anywhere”(一次编写,到处运行)
版本演进时间线
| 年份 | 版本 | 里程碑特性 |
|---|---|---|
| 1996 | JDK 1.0 | 首次发布,Applet、AWT |
| 1998 | JDK 1.2 | 集合框架、Swing、JIT 编译器 |
| 2004 | JDK 5.0 | 泛型、枚举、注解、自动装箱、增强 for 循环 |
| 2006 | JDK 6 | 脚本引擎、JDBC 4.0 |
| 2011 | JDK 7 | try-with-resources、钻石操作符、NIO.2 |
| 2014 | JDK 8 | Lambda、Stream API、Optional、新日期 API |
| 2017 | JDK 9 | 模块化系统(Jigsaw)、JShell |
| 2018 | JDK 11 | LTS、HTTP Client、局部变量推断(var) |
| 2021 | JDK 17 | LTS、sealed class、pattern matching、record |
| 2023 | JDK 21 | LTS、虚拟线程(Loom)、分代 ZGC、switch 模式匹配 |
⚠️ 企业生产环境推荐使用 LTS(长期支持)版本,如 JDK 17 或 JDK 21。非 LTS 版本仅维护 6 个月。
Java 平台体系
Java 不仅仅是一门语言,更是一个庞大的平台生态系统:
┌─────────────────────────────────────────────────────┐
│ Java 应用程序 │
├─────────────┬───────────────┬───────────────────────┤
│ Java SE │ Java EE │ Java ME │
│ (Standard) │ (Enterprise) │ (Micro) │
│ │ → Jakarta EE │ │
│ 核心 API │ Web/企业服务 │ 嵌入式/移动设备 │
├─────────────┴───────────────┴───────────────────────┤
│ Java 虚拟机 (JVM) │
├─────────────────────────────────────────────────────┤
│ 操作系统 (Windows / Linux / macOS) │
└─────────────────────────────────────────────────────┘
JVM — Java 的核心竞争力
JVM(Java Virtual Machine) 是 Java 生态的基石。它是一个抽象的计算机器,负责执行 Java 字节码(bytecode)。
JVM 架构简图
源码 (.java)
│
▼ javac 编译器
字节码 (.class)
│
▼
┌──────────────────── JVM ────────────────────┐
│ 类加载器 (Class Loader) │
│ ↓ │
│ 运行时数据区 (Runtime Data Areas) │
│ ┌─────┬──────┬───────┬──────┬──────────┐ │
│ │堆 │栈 │方法区 │PC │本地方法栈 │ │
│ │Heap │Stack │Method │Reg. │Native │ │
│ │ │ │Area │ │ │ │
│ └─────┴──────┴───────┴──────┴──────────┘ │
│ ↓ │
│ 执行引擎 (Execution Engine) │
│ ┌──────────┬───────────┬──────────────┐ │
│ │解释器 │JIT 编译器 │垃圾回收器(GC)│ │
│ │Interpreter│Compiler │ │ │
│ └──────────┴───────────┴──────────────┘ │
└──────────────────────────────────────────────┘
JVM 语言多样性
JVM 不仅运行 Java,还支持众多语言:
| 语言 | 特点 | 典型用途 |
|---|---|---|
| Kotlin | 现代、简洁、空安全 | Android、后端开发 |
| Scala | 函数式 + 面向对象 | 大数据(Spark) |
| Groovy | 动态、脚本化 | Gradle 构建、测试 |
| Clojure | Lisp 方言、不可变 | 并发编程、数据处理 |
| GraalVM | 多语言运行时 | 高性能、原生编译 |
Java 生态系统
Java 拥有业界最成熟的生态系统:
┌──────────────── 生态全景 ────────────────────┐
│ │
│ 构建工具: Maven · Gradle · Ant │
│ Web 框架: Spring Boot · Quarkus · Micronaut │
│ ORM: Hibernate · MyBatis · jOOQ │
│ 微服务: Spring Cloud · Dubbo · gRPC │
│ 消息队列: Kafka · RabbitMQ · RocketMQ │
│ 缓存: Redis · Ehcache · Caffeine │
│ 搜索: Elasticsearch · Solr │
│ 容器化: Docker · Kubernetes · Jib │
│ 监控: Prometheus · Grafana · Arthas │
│ 测试: JUnit · Mockito · Testcontainers │
│ │
└───────────────────────────────────────────────┘
Java 适用场景
✅ 最适合的场景
| 场景 | 原因 | 代表案例 |
|---|---|---|
| 企业级后端 | 稳定、安全、生态丰富 | 银行、电商、ERP |
| 大数据处理 | Hadoop/Spark 生态 | 数据仓库、ETL |
| Android 开发 | 官方支持(Kotlin 基于 JVM) | 移动应用 |
| 微服务架构 | Spring Cloud 体系 | 分布式系统 |
| 中间件开发 | 高并发、高性能 | MQ、RPC 框架 |
❌ 不太适合的场景
| 场景 | 更好的选择 |
|---|---|
| 系统级编程(驱动、OS) | C / Rust |
| 前端开发 | JavaScript / TypeScript |
| 简单脚本任务 | Python / Shell |
| 实时嵌入式系统 | C / C++ |
第一个 Java 程序
/**
* 我的第一个 Java 程序
* 文件名: HelloWorld.java
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("你好,Java!");
System.out.println("Java 版本: " + System.getProperty("java.version"));
System.out.println("JVM 名称: " + System.getProperty("java.vm.name"));
}
}
编译运行:
# 编译
javac HelloWorld.java
# 运行
java HelloWorld
# 输出:
# 你好,Java!
# Java 版本: 21.0.2
# JVM 名称: Java HotSpot(TM) 64-Bit Server VM
Java 与其他语言对比
| 维度 | Java | Python | Go | Rust |
|---|---|---|---|---|
| 类型系统 | 静态强类型 | 动态类型 | 静态类型 | 静态类型 |
| 运行方式 | JVM 解释 + JIT | 解释执行 | 编译为原生 | 编译为原生 |
| 性能 | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 学习曲线 | 中等 | 低 | 低 | 高 |
| 并发模型 | 线程 + 虚拟线程 | GIL 限制 | Goroutine | 所有权模型 |
| 生态成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 薪资水平 | 高 | 高 | 高 | 很高 |
💡 技巧
JShell — JDK 9+ 内置的 REPL 工具,可快速试验 Java 代码片段:
jshell | Welcome to JShell -- Version 21.0.2 jshell> 2 + 3 $1 ==> 5GraalVM Native Image — 可将 Java 应用编译为原生可执行文件,启动时间从秒级降到毫秒级。
多版本 JSDK 管理 — 推荐使用 SDKMAN! 管理多个 JDK 版本:
sdk install java 21.0.2-tem sdk use java 21.0.2-tem
🏢 业务场景
- 金融行业: Java 是银行核心系统的首选语言。某大型银行使用 Spring Boot + MyBatis 构建的交易系统,日处理千万级交易。
- 电商系统: 阿里巴巴是国内最大的 Java 使用者,其电商平台基于 Java 构建,支撑双 11 流量洪峰。
- 大数据平台: Hadoop、Spark、Flink 等大数据框架均基于 JVM,Java 是数据工程师的必备技能。
📖 扩展阅读
- Oracle Java 官方文档
- OpenJDK 项目
- Java 版本特性一览
- 书籍:《Effective Java》Joshua Bloch
- 书籍:《Java 并发编程实战》Brian Goetz