IDEA 是用什么开发的?

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?

原因很现实:

  1. JavaFX 在早期非常不成熟
  2. Swing 足够稳定 + JetBrains 已深度定制
  3. JavaFX 的控件体系不适合 IDE 这种超大规模系统
  4. 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
相关推荐
yaoxin52112317 小时前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
java·开发语言·python
NotFound48618 小时前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
一 乐19 小时前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
鱼鳞_20 小时前
Java学习笔记_Day29(异常)
java·笔记·学习
烟锁池塘柳020 小时前
一文讲透 C++ / Java 中方法重载(Overload)与方法重写(Override)在调用时机等方面的区别
java·c++·面向对象
一叶飘零_sweeeet20 小时前
深入拆解 Fork/Join 框架:核心原理、分治模型与参数调优实战
java·并发编程
云烟成雨TD20 小时前
Spring AI Alibaba 1.x 系列【23】短期记忆
java·人工智能·spring
摇滚侠20 小时前
帮我整理一份 IDEA 开发中常用快捷键
java·ide·intellij-idea
疯狂成瘾者21 小时前
YAML配置介绍
java
cccccc语言我来了21 小时前
C++轻量级消息队列服务器
java·服务器·c++