直接修改 phpstorm.vmoptions 文件比界面设置更有效,因其是 PhpStorm 启动时唯一读取的 JVM 参数来源;需正确配置 -Xms、-Xmx、-XX:ReservedCodeCacheSize 及硬件加速参数,并彻底重启生效。

直接改 phpstorm.vmoptions 文件比点界面设置更有效
PhpStorm 启动时读取的 JVM 参数只来自 phpstorm.vmoptions(或 phpstorm64.vmoptions),Settings 里那些“内存设置”选项根本不会写入该文件,也不起作用。你调了界面参数却没卡顿改善,大概率是白忙活。
这个文件位置因系统而异:
– Linux/macOS:在 PhpStorm 安装目录的 bin/ 子目录下
– Windows:同理,在安装路径下的 bin\ 里
别去用户配置目录(如 ~/.PhpStorm2023.3/config/)找,那里没有运行时生效的 VM 配置。
- 首次修改建议先备份原文件
- 改完必须彻底退出 PhpStorm(包括托盘进程),再重启才生效
- 如果用 snap 或 flatpak 安装,
vmoptions可能被沙盒限制,优先考虑 tar.gz 版本
-Xms 和 -Xmx 不是越大越好,得看物理内存余量
堆内存设太高反而触发频繁 GC,尤其在 16GB 总内存的机器上硬配 -Xmx4g,容易让系统开始 swap,编辑器光标都卡顿。实测更稳的组合是:
-Xms1024m -Xmx2048m -XX:ReservedCodeCacheSize=360m
关键点:
-
-Xms建议设为-Xmx的 50%~70%,避免运行中反复扩容 - 超过 3GB 的
-Xmx在多数开发机上收益递减,还可能触发 CMS GC 退化为 Serial GC -
-XX:ReservedCodeCacheSize要同步加大,否则 JIT 编译代码缓存满会导致性能断崖下跌
硬件加速开关不加,字体渲染和滚动就是软渲染
很多用户反馈“输几个字就卡一下”“鼠标滚轮不跟手”,本质是 Swing GUI 没启用 OpenGL 后端。Linux 和 macOS 必须手动加这两行:
立即学习“PHP免费学习笔记(深入)”;
-Dawt.useSystemAAFontSettings=lcd -Dawt.java2d.opengl=true
注意拼写:useSystemAAFontSettings 不是 usesystemAAFontSettings(旧文档常写错);opengl 小写,大小写错误会导致参数被忽略。
- macOS 还可追加
-Dapple.awt.graphics.UseQuartz=true,但仅限 JDK 8–17,JDK 21+ 已废弃 Quartz 支持 - Ubuntu/Debian 上若启用了 Wayland,
opengl=true可能失效,此时换回 X11 会更稳 - 加了之后如果启动报
GLXBadContext错误,说明显卡驱动没装好,不是 PhpStorm 的问题
乱码和编码问题,-Dfile.encoding=UTF-8 是兜底项
即使你在 Settings → File Encodings 里把 Global/Project 都设成 UTF-8,新建文件、终端输出、甚至 Git 提交信息仍可能乱码——因为 JVM 自身默认编码还是系统 locale。强制指定才能统一:
-Dfile.encoding=UTF-8
这行要加在 vmoptions 文件末尾,且不能和前面的参数挤在同一行。它影响的是:
- Java NIO 读写文件的默认 charset
- IDE 内置 Terminal 的字符集(尤其 SSH 连远程服务器时)
- Git 插件解析 commit log 的编码方式
如果项目含 GBK 文件,不要指望这行能自动转码;它只是确保 PhpStorm 自身行为一致。混合编码项目,仍需在 File Encodings 里为特定文件类型单独指定编码。
真正卡顿的根源往往不在参数本身,而在改完没杀干净进程、或参数之间冲突(比如同时开 opengl=true 和 sun.java2d.xrender=true)。每次只动一两个参数,观察现象变化,比一口气粘贴网上全套配置靠谱得多。


















