IntelliJ IDEA 從卡頓到起飛,只用改這些。。。

前言

--

今天不聊高併發、不聊架構設計,想和大家聊一個每位 Java 程式設計師每天都在用的工具——IntelliJ IDEA。

說實話,用了多年的 IDEA,我踩過不少坑。

今天我把最經典的 10 個坑整理出來,希望能幫大家少走一些彎路。

很多小夥伴在工作中肯定也遇到過類似的問題,比如「IDEA 突然變卡了」、「程式碼明明沒錯就是編譯不過」、「Debug 的時候中斷點不生效」等等。

這篇文章沒有高深的理論,全是實戰經驗,新手也能看懂。

希望對你會有所幫助。

更多專案實戰在我的技術網站:susan.net.cn/project

IDEA 的優缺點和使用場景

在正式開講之前,我們先來客觀地看一下 IDEA 這款 IDE 到底好在哪、不好在哪,以及適合什麼場景。

IDEA 的優點

  1. 智慧程式碼提示:相比 Eclipse,IDEA 的程式碼分析引擎更強大,能根據上下文給出更精準的補全建議。
  2. 重構能力極強:重新命名、擷取方法、變更簽章等重構操作非常安全,能自動修復所有引用。
  3. 內建工具豐富:版本控制、資料庫客戶端、HTTP Client、終端機等一應俱全,不用來回切換。
  4. 外掛生態完善:Lombok、MyBatis、SonarLint 等外掛幾乎覆蓋了所有開發場景。
  5. 除錯功能強大:條件中斷點、運算式求值、遠端除錯、記憶體分析等,排查問題非常高效。

IDEA 的缺點

  1. 記憶體占用較高:預設配置下輕鬆吃掉 2-4G 記憶體,老機器跑起來比較吃力。
  2. 索引機制耗時:每次匯入專案或依賴變更,都會觸發重新索引,大專案可能要等幾分鐘。
  3. 配置相對複雜:很多優化需要手動調整,新手容易被各種設定搞暈。
  4. 商業軟體:Ultimate 版本收費,雖然可以用 Community 版,但很多企業級功能(如 Spring、JPA、JS 等)需要付費。

適用場景

場景是否推薦說明大型 Java/Spring 專案⭐⭐⭐⭐⭐IDEA 的 Spring 支援無出其右中小型 Web 專案⭐⭐⭐⭐⭐開發效率遠高於 Eclipse多語言混合專案(Java+JS+Python)⭐⭐⭐⭐⭐Ultimate 版支援所有主流語言老舊機器(記憶體<8G)⭐⭐勉強能用,但建議升級配置或換 VS Code純前端專案⭐⭐VS Code 可能更合適學生/開源學習⭐⭐⭐⭐Community 版足夠用好了,了解這些背景之後,咱們正式進入主題——我踩過的 10 個坑。

第 1 個坑:越用越卡,CPU 狂飆

現象

IDEA 開啟兩三個小時之後,敲個程式碼都要卡兩秒,滑鼠轉圈圈,CPU 動不動就 100%。

重啟一下又好一會兒,過一會兒又卡了。

原因分析

IDEA 的卡頓通常有兩個原因:記憶體分配不足索引被頻繁觸發

先說說記憶體。

IDEA 預設的堆積記憶體只有 512MB-1GB 左右,對於現代專案(尤其是微服務專案,一個 workspace 裡有十幾個 module)來說,這點記憶體根本不夠用。

JVM 頻繁進行 Full GC,自然就卡了。

再說說索引。

IDEA 會對專案中的所有檔案建立索引,以便實現快速搜尋、跳轉等功能。

但是如果你開啟了「自動索引外部檔案」或者專案中有一個巨大的 node_modules 資料夾(前端同學懂得),IDEA 就會一直嘗試索引這些根本不需要索引的檔案,CPU 直接拉滿。

解決方案

第一步,手動調整 IDEA 的記憶體配置。

找到 IDEA 安裝目錄下的 idea64.exe.vmoptions 檔案(Mac 在 /Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions),修改以下參數:

properties 体验AI代码助手 代码解读复制代码# 建議配置(8G 記憶體機器)
-Xms2048m           # 初始堆積記憶體,建議直接給到 2G
-Xmx4096m           # 最大堆積記憶體,給到 4G
-XX:ReservedCodeCacheSize=512m   # 程式碼快取
-XX:+UseG1GC        # 使用 G1 垃圾回收器,減少停頓
-XX:+UseStringDeduplication  # 去重字串,節省記憶體

第二步,排除不需要索引的目錄。

打開 File -> Settings -> Project Structure -> Modules,把那些不需要索引的資料夾(如 node_modules.gittargetbuild 等)標記為 Excluded

![轉存失敗,建議直接上傳圖片檔案]()

做完這兩步,IDEA 的流暢度會有一個質的飛躍。

第 2 個坑:getter/setter 報紅

現象

本來好好的專案,更新了 IDEA 或者改了某個配置之後,所有用 @Data@Getter 註解的類別的呼叫地方突然飄紅,編譯失敗,提示「找不到 getXxx 方法」。

原因分析

Lombok 的工作原理是在編譯期透過註解處理器自動生成 getter/setter 等程式碼。

IDEA 需要安裝 Lombok 外掛才能識別這些生成的程式碼,否則就會報紅。

這個坑通常發生在以下幾種情況:

  • 升級 IDEA 後,舊版 Lombok 外掛不相容
  • 專案的 Lombok 依賴版本和外掛版本不一致
  • 開啟了 IDEA 的「註解處理」但沒有正確配置

解決方案

第一步,檢查 Lombok 外掛是否安裝並啟用。File -> Settings -> Plugins 搜尋 Lombok,確保已安裝且勾選。

第二步,打開 File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors,勾選「Enable annotation processing」。

第三步,確保專案的 pom.xml 或 build.gradle 中引入了 Lombok 依賴,並且版本不要太老。推薦版本:

xml 体验AI代码助手 代码解读复制代码<!-- Maven -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

第四步,如果上面三步都做了還是不行,嘗試 File -> Invalidate Caches and Restart,清空 IDEA 的快取並重啟。這個操作能解決 IDEA 裡 80% 的玄學問題。

有一次我遇到一個特別詭異的情況:同一個專案,同事的 IDEA 沒問題,我的就是報紅。

最後發現是 .idea 目錄下的配置檔衝突了,刪掉 .idea 目錄讓 IDEA 重新生成就正常了。

第 3 個坑:Debug 中斷點死活進不去

現象

除錯的時候,我在一個 Service 方法的第一行打了一個中斷點,但是跑起來中斷點根本不生效,程式碼直接執行過去了。

更離譜的是,有時候中斷點上的勾勾是灰色的。

原因分析

這個坑有幾種可能:

  1. 中斷點打在不可執行的程式碼行上:比如介面的方法、空行、註解行。IDEA 的中斷點只能打在可執行的位元組碼行上。
  2. 開啟了「靜默中斷點」或「禁用所有中斷點」:中斷點圖示上有一個斜線,表示暫時禁用。
  3. 程式碼被 JIT 內聯優化了:在 release 模式下,熱點方法可能被內聯,導致中斷點位置和原始碼對不上。
  4. 多執行緒環境下,中斷點被其他執行緒繞過了:如果你打了條件中斷點且條件一直為 false,自然不會進去。

解決方案

首先,檢查中斷點圖示。正常中斷點是紅色圓點,如果帶斜線,點擊右鍵取消「Disable」。

或者按 Ctrl + Shift + F8 打開中斷點管理面板,看看是不是所有中斷點都被禁用了。

其次,確保中斷點打在可執行行上。比如:

java 体验AI代码助手 代码解读复制代码// ❌ 以下位置不能打中斷點
public void doSomething() // 方法簽名行

// ✅ 這樣是可以的
public void doSomething() {
    System.out.println("這裡可以打中斷點");  // 第一行大括號後的有效程式碼
}

第三,如果是在多執行緒除錯中,檢查一下條件中斷點。IDEA 支援在中斷點上按右鍵設定條件,比如 str == null。如果條件永遠不滿足,中斷點當然不會觸發。

第四,終極方案:使用 Thread.currentThread().getStackTrace() 印出堆疊來定位問題,或者改用日誌輸出。

第 4 個坑:主控台中文亂碼

現象

執行專案,主控台印出的日誌中,中文全部變成了 ??? 或者 \uXXXX 這樣的亂碼。

System.out.println("你好") 輸出的是「???」。

原因分析

亂碼的本質是編碼不一致

IDEA 的主控台、專案的原始檔編碼、JVM 的預設編碼、作業系統編碼這四個地方只要有一個對不上,就可能出現亂碼。

常見的情況是:

  • 原始檔是 UTF-8 編碼,但 IDEA 主控台用的是 GBK
  • 或者反過來,原始檔是 GBK,主控台用 UTF-8
  • JVM 的 file.encoding 參數沒有正確設定

解決方案

第一步,統一所有地方的編碼為 UTF-8。

打開 File -> Settings -> Editor -> File Encodings

  • Global Encoding: UTF-8
  • Project Encoding: UTF-8
  • Default encoding for properties files: UTF-8
  • 勾選「Transparent native-to-ascii conversion」

第二步,修改 IDEA 主控台的編碼。在 Help -> Edit Custom VM Options 中新增:

properties 体验AI代码助手 代码解读复制代码-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8

第三步,對於 Maven 專案,在 pom.xml 的 maven-surefire-pluginmaven-compiler-plugin 中也指定編碼:

xml 体验AI代码助手 代码解读复制代码<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

第四步,如果用的是 Logback 或 Log4j,檢查日誌配置檔的編碼,比如 Logback:

xml 体验AI代码助手 代码解读复制代码<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        <charset>UTF-8</charset>  <!-- 關鍵 -->
    </encoder>
</appender>

做完這些配置之後,重啟 IDEA,亂碼問題一般就能解決了。

第 5 個坑:Git 提交時多了 .idea 檔

現象

用 IDEA 內建的 Git 提交程式碼時,Commit Changes 視窗裡總是出現一些不應該提交的檔案,比如 .idea/workspace.xmltarget/ 目錄下的 class 檔、.iml 檔等。

有時候一不小心就提交上去了,污染了 Git 倉庫。

原因分析

IDEA 預設會把專案的 .idea 目錄和 .iml 檔納入版本控制,因為這些檔案記錄了專案的配置信息。

但問題是,這些檔案裡可能包含本機路徑、個人配置等環境相關的信息,不同機器之間不應該共享。

target/ 目錄是編譯產物,更不應該提交。

根本原因是沒有配置 .gitignore 檔案,或者配置了但 IDEA 沒有正確識別。

解決方案

在專案的根目錄下建立 .gitignore 檔案,把以下內容放進去:

gitignore 体验AI代码助手 代码解读复制代码# Compiled class file
*.class
target/
out/

# IntelliJ IDEA
.idea/
*.iml
*.iws
*.ipr
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/compiler.xml
.idea/libraries/

# Log file
*.log
*.log.gz

# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

然後在 IDEA 中,打開 Settings -> Version Control -> Ignored Files,確保沒有任何衝突的規則。

如果你的 .gitignore 檔案已經在 Git 倉庫中,並且之前已經錯誤地提交了 .idea 目錄,需要先執行命令從 Git 快取中移除:

bash 体验AI代码助手 代码解读复制代码git rm -r --cached .idea
git commit -m "Remove .idea from git"

之後再提交,就只會看到需要提交的原始碼檔案了。

第 6 個坑:Maven 依賴下載超慢

現象

在 IDEA 中重新整理 Maven 專案(Reload All Maven Projects)時,右下角一直在轉圈,下載依賴特別慢,有時候直接逾時報「Transfer failed」或者「Read timed out」。

原因分析

Maven 預設的中央倉庫在國外,網路延遲大,下載速度自然慢。

IDEA 雖然內建了 Maven,但預設會使用 Maven 自帶的 settings.xml,其中沒有配置國內鏡像。

另外,IDEA 的 Maven 和命令列 Maven 可能會共用同一個本機倉庫(~/.m2/repository),如果同時操作,會出現鎖定檔案衝突。

解決方案

第一步,配置國內鏡像來源。

File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven 中,找到 User settings file,點擊「Override」,然後選擇或建立一個 settings.xml 檔案,填入以下內容:

xml 体验AI代码助手 代码解读复制代码<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
          http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <mirrors>
        <!-- 阿里雲 Maven 鏡像 -->
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>central</mirrorOf>
            <name>阿里雲公共倉庫</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>jdk-1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
        </profile>
    </profiles>
</settings>

第二步,在 Maven 設定中,把「Work offline」關掉(除非你真的要離線工作),把「Import Maven projects automatically」打開,這樣依賴變更時會自動下載。

第三步,如果你的網路環境特別差,可以嘗試配置 IDEA 的 HTTP Proxy。Settings -> Appearance & Behavior -> System Settings -> HTTP Proxy,如果公司有內網代理,填進去即可。

配置完成後,點擊 Maven 面板上的「Reload All Projects」按鈕,下載速度應該會明顯提升。

第 7 個坑:程式碼編譯通過,執行卻報錯

現象

在 IDEA 裡 Maven 編譯沒有任何錯誤,mvn clean compile 也成功了。

但是執行 main 方法或者啟動 Spring Boot 時,主控台報錯:java.lang.ClassNotFoundException: com.xxx.SomeClass

原因分析

這個坑的原因很隱蔽:IDEA 的編譯器和 Maven 的編譯輸出目錄不一致

IDEA 預設的編譯輸出目錄是 專案根目錄/out/ 或者 target/classes/,而 Maven 的編譯輸出目錄是 target/classes/

如果你修改過專案結構,或者 IDEA 的快取亂了,可能會導致 IDEA 執行時用的 classpath 裡找不到某些類別。

另一個常見原因是:使用了 Lombok,但是 IDEA 的註解處理器沒有生成程式碼,或者生成的程式碼路徑不對。

解決方案

首先,打開 File -> Settings -> Build, Execution, Deployment -> Compiler,確保「Build project automatically」是勾選的(但注意這會在你儲存檔案時自動編譯,對效能有影響)。

然後,檢查 File -> Project Structure -> Modules,看每個 module 的「Output path」和「Test output path」是否指向了正確的目錄。一般來說,Maven 專案應該指向 target/classestarget/test-classes

![轉存失敗,建議直接上傳圖片檔案]()

最暴力的解決方法:點擊 Build -> Rebuild Project 清空所有編譯輸出,然後重新編譯。如果還不行,執行 File -> Invalidate Caches and Restart 清空快取。

還有一個絕招:用 Maven 命令列先打包,然後手動執行打好的 jar 包,看是不是同樣的問題。

如果 jar 包能執行,那就是 IDEA 的執行配置有問題;如果 jar 包也報錯,那就是程式碼本身有依賴問題。

第 8 個坑:快捷鍵失靈

現象

習慣了用 Ctrl+CCtrl+V 複製貼上程式碼,突然有一天發現快捷鍵不管用了,或者按下去之後出現奇怪的行為(比如彈出某個面板、刪除文字等)。

更離譜的是,Ctrl+Alt+L 格式化程式碼也無效。

原因分析

IDEA 的快捷鍵衝突通常有兩種情況:

  1. 與其他軟體的快捷鍵衝突:比如微信 PC 版的截圖快捷鍵是 Ctrl+Alt+A,和 IDEA 的一些外掛快捷鍵重複;搜狗輸入法的 Ctrl+Shift+F 會切換繁簡體。
  2. IDEA 的 keymap 被無意中修改了:可能是不小心按到了「切換 keymap」的快捷鍵,或者某個外掛改動了設定。

解決方案

第一步,檢查是否切換了 keymap。

打開 File -> Settings -> Keymap,看看目前選中的 keymap 是不是你常用的(比如 Windows 預設是 Default,Mac 是 Mac OS X)。如果顯示 Default copy 或者別的,說明被改過了。可以點擊「Restore Defaults」恢復預設。

第二步,排查外部軟體衝突。

常見的衝突有:

  • 微信:Ctrl+Alt+W
  • 搜狗/微軟拼音:Ctrl+Shift+F(繁簡體切換)、Ctrl+Shift+E(表情)
  • QQ:Ctrl+Alt+A(截圖)
  • 網易雲音樂:Ctrl+Alt+上/下(音量)

解決方法是去這些軟體裡修改快捷鍵,或者直接關閉它們。我個人的習慣是寫程式碼的時候把聊天軟體退了,清淨。

第三步,如果只有某個特定快捷鍵失效,可以在 Keymap 裡搜尋這個快捷鍵的動作,看看是不是被占用了。

比如搜尋 Reformat Code(格式化程式碼),預設是 Ctrl+Alt+L,如果顯示多個動作,說明有衝突,可以右鍵移除一個。

第 9 個坑:連不上 MySQL

現象

IDEA 內建的 Database 工具(很好用,很多小夥伴可能不知道)連接 MySQL 時,報錯:The server time zone value '???ú±ê×??±??' is unrecognized 或者 Could not create connection to database server.

原因分析

MySQL 8.0 以上版本要求明確指定時區參數 serverTimezone。IDEA 的 Database 連接配置預設不包含這個參數,導致了錯誤。

解決方案

在 IDEA 的 Database 面板中,點擊資料來源設定,進入「Advanced」選項卡,手動新增一個參數:

  • Name: serverTimezone
  • Value: Asia/Shanghai 或者 UTC

如果還不行,在「General」頁面的 URL 後面直接加上:

bash 体验AI代码助手 代码解读复制代码jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8

另外,如果是用 Spring Boot 專案的資料來源配置,也建議在連接池的 URL 中加入這些參數,防止執行時報同樣的錯。

最後,檢查一下 MySQL 驅動版本。IDEA 預設會下載最新的驅動,但如果你的 MySQL 是 5.7 版本,用 8.x 的驅動可能會不相容。

可以在資料來源的「Driver」下拉選單中選擇舊版本。

第 10 個坑:提交程式碼時自動格式化

現象

團隊協作時,你提交程式碼前 IDEA 自動幫你格式化了程式碼(Ctrl+Alt+L)。

結果提交上去之後,整個檔案的縮排、換行、空行全變了。

你的改動可能只有一行,但是 git diff 裡卻顯示了整個檔案幾百行的變更。

程式碼 Review 的時候,同事根本看不出你到底改了什麼。

原因分析

這是 IDEA 的「崇高」功能——在提交程式碼時自動執行程式碼格式化、最佳化匯入等操作。

初衷是好的,希望保持程式碼風格統一。

但是,如果團隊成員沒有使用統一的程式碼格式化規則(比如每個人的縮排設定不同:有的用 4 空格、有的用 2 空格、有的用 Tab),就會導致互相覆蓋、diff 爆炸。

解決方案

有兩種解決思路:

方案一:統一團隊程式碼格式(推薦)

在專案根目錄下放置一個 .editorconfig 檔案,這是各大 IDE 和編輯器共同遵守的格式規範:

ini 体验AI代码助手 代码解读复制代码# .editorconfig
root = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.java]
indent_size = 4

[*.xml]
indent_size = 2

IDEA 會自動識別 .editorconfig,並提示是否採用。這樣所有人都用同一套規則。

同時,在 IDEA 中匯出程式碼格式化規則(File -> Settings -> Editor -> Code Style -> Java -> Manage -> Export),把檔案放進專案版本控制,讓同事匯入。

方案二:關閉自動格式化功能

如果你不想自動格式化,可以關掉。打開 File -> Settings -> Version Control -> Commit,把「Reformat code」、「Optimize imports」、「Rearrange code」前面的勾全部取消。

這樣一來,提交的時候就只會提交你手動改動的部分,不會動其他程式碼。當然,你需要自己保證程式碼格式是 OK 的。

個人建議採用方案一,這樣既保持了程式碼整潔,又不會引起格式衝突。

總結

好了,10 個坑終於講完了。

我來幫大家快速回顧一下:

序號坑一句話解決方案1IDEA 越來越卡調大記憶體 + 排除無需索引的目錄2Lombok 失效裝外掛 + 開啟註解處理3中斷點進不去打在有效行 + 檢查禁用狀態4主控台中文亂碼統一 UTF-8 + JVM 參數5Git 提交了不該提交的檔案配置 .gitignore + 移除已提交的6Maven 依賴下載慢配置阿里雲鏡像7ClassNotFoundException 檢查編譯輸出目錄 + Rebuild8快捷鍵失靈檢查 keymap + 關閉衝突軟體9資料庫時區錯誤新增 serverTimezone 參數10提交時自動改格式統一 .editorconfig 或關閉自動格式化最後用一張圖來總結一下這些坑的應對思路:

![轉存失敗,建議直接上傳圖片檔案]()

寫這篇文章,一方面是幫大家避坑,另一方面也是對自己這些年 IDEA 使用經驗的一個總結。

工欲善其事,必先利其器

IDEA 確實是一個非常強大的工具,但再強大的工具,如果不會用、用不對,也會變成絆腳石。

希望這篇文章能給大家帶來實實在在的幫助。

如果你也踩過其他「奇葩」的坑,歡迎在留言區分享。

咱們互相學習、共同進步!

更多專案實戰在我的技術網站:susan.net.cn/project


原文出處:https://juejin.cn/post/7643355476503347254


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝12   💬4   ❤️1
464
🥈
alicec
📝1   ❤️2
87
#4
我愛JS
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登