IntelliJ IDEA 的技术架构非常成熟,它本质上是一个基于 Java + JVM + Swing/UI 自研框架的桌面应用,并不是 Electron、Qt 之类。下面按体系给你详细拆解 IDEA 的技术栈和架构,这对你未来做架构师非常有价值。
一、IDEA 是用什么开发的?
1. 语言:Java + Kotlin(核心)
- 早期完全用 Java 开发。
- 近几年 JetBrains 大量使用 Kotlin 重写和新增模块。
- JVM 语言生态让它具有跨平台能力。
2. UI:Swing + JetBrains 自研 UI 框架(JB UI)
IDEA 没有用 JavaFX,也没有用 Electron,而是使用:
✔ Swing(核心 UI 框架)
成熟、稳定、跨平台(Windows、Linux、macOS)。
✔ JB 自研 UI 框架(基于 Swing 封装)
比如:
- IntelliJ Look & Feel
- Darcula 主题
- 高级控件(Editor、ToolWindow 等)
- 自研渲染与动画系统
它对 Swing 进行了大量改造,以实现现代化的 IDE UI 体验。
二、IDEA 的核心架构技术
JetBrains 全家桶(IDEA、PyCharm、WebStorm)都是基于同一套平台:
1. IntelliJ Platform(基础平台框架)
IDE 全家桶的核心基础设施,包括:
- 项目模型(Project Model)
- VFS(Virtual File System)
- PSI(Program Structure Interface,语法树)
- 编辑器子系统(Editor)
- 插件系统(Plugin System)
- 编译系统(Build System)
- 调试系统(Debugger Framework)
- UI Framework(Swing + JB UI)
- Inspection(代码检查)
- 索引系统(Indexing)
这套平台实际上是一种"大型桌面系统平台",很多公司也基于它定制自己的 IDE。
三、插件架构(最重要的设计)
IDEA 的可扩展能力几乎全来自插件系统。
- 插件用 Java 或 Kotlin 编写。
- 通过 Extension Points(扩展点) 注册功能。
- 可扩展菜单、工具栏、面板、编辑器行为等所有内容。
- 插件可以独立发布,不需要修改主程序。
这是大型桌面应用的经典最佳实践。
四、跨平台机制
IDEA 能在 Windows/macOS/Linux 运行完全一致,是因为:
- 使用 JVM(Java Virtual Machine)
- 使用 Swing(跨平台 UI)
- 系统交互通过 JNI/JNA 做适配
- 使用 Skiko / JetBrains Runtime 做一些图形渲染增强
JetBrains 甚至维护一个自己定制的 JDK:
JetBrains Runtime(JBR)
- 基于 OpenJDK
- 包含改进的字体渲染、UI 渲染、性能优化
五、性能如何保证?
IDEA 被认为是"最复杂的桌面应用之一",它的性能依赖大量技术手段:
1. 全量索引 + 增量索引
通过 File-based Index + Stub Index 保证大项目仍然流畅。
2. 后台任务体系
所有耗时任务(索引、扫描、编译)都在后台线程执行,UI 永不阻塞。
3. 内存高效设计
- 使用 SoftReference/WeakReference 缓存
- 使用高效数据结构(IntList、BitSet)
- PSI 树按需加载
4. 自研编辑器(Editor)
几乎是 IDEA 最核心的模块:
- 不使用 Swing 文本组件
- 自己实现文本渲染、虚拟空间、软换行
- 极高的渲染性能
六、为什么 IDEA 不用 JavaFX?
原因很现实:
- JavaFX 在早期非常不成熟
- Swing 足够稳定 + JetBrains 已深度定制
- JavaFX 的控件体系不适合 IDE 这种超大规模系统
- JetBrains 有自己的 UI 渲染改进需求,需要控制权
JetBrains 曾公开表示:
想迁移到 JavaFX,但成本巨大且收益有限。
七、总结:IDEA 的技术选型
| 层级 | 技术 |
|---|---|
| 编程语言 | Java + Kotlin |
| 运行平台 | JVM(JetBrains Runtime) |
| UI 框架 | Swing + JetBrains UI |
| 编辑器 | 自研 Editor 组件 |
| 插件系统 | Java/Kotlin,基于 Extension Points |
| 跨平台 | JVM + Swing + JBR |
| 核心架构概念 | PSI、VFS、Index、Project Model |