解决PyCharm/IDEA等无法启动,if you already have a 64-bit JDK....Failed to create JVM.JVM path问题

记录一个今天花了一下午的时间,靠各种分析和判断,解决了如题说述的问题(网上其他方法对于我均不奏效)。


在跑深度学习程序时,Pycharm运行时显示内存溢出,弹出了修改内存的窗口,如下图所示:

然后将这三个参数改大了之后不小心点了个shutdown,发现Pycharm居然无法启动了,显示 如下:

Error launching PyCharm

lf you already have a 64-bit JDK installed, define a JAVA_HOME variable inComputer > System Properties > System Settings > Environment Variables.

Failed to create JVM.JVM Path: XXXXX

看这个意思,仿佛是环境变量JAVA_HOME出了问题,导致创建JVM虚拟机失败,程序无法启动(注意,因为Pycharm是基于Java语言开发的,所以Pycharm启动和Java虚拟机有关系,报错和Java有关系就很正常了)

但是,我们很容易产生怀疑,环境变量我们一般不会去动它,也没有新装任何程序对其进行改动,按理说JAVA_HOME不会出问题的,经检查,我的JAVA_HOME确实没动过。

此外,Google上和国内CSDN上已经有很多这方面的文章,但都没有对原因做具体分析,因此很难对症下药,对我遇到的情况全都不起效。


那么到底是什么原因呢?实际上,我们可以打开安装目录下的bin目录,例如我的是在:

D:\Software\PyCharm\PyCharm 2021.1.1\bin

我们可以看到该目录下存在一个叫做pycharm.bat的文件:

 这个文件就是启动Pycharm时运行的脚本。

我们在地址栏里直接输入cmd回车,即可打开控制台直接进入到当前目录。

然后输入 .\pycharm.bat 即可手动运行这个脚本。

我们可以看到,其实真正的错误原因,是 ReservedCodecacheSize(保留代码缓存)这个参数,要求的最大值只能是2048M,也就是2个G,而我们之前改动了这个参数,改成了4个G,因为这个值设的太大,无法创建太大的虚拟机,所以导致JVM创建失败,最终导致了我们程序无法运行,Pycharm打不开。(这里不得不吐槽Pycahrm的开发人员也不在用户当时设置这个参数的时候就警告或者做个阈值限制,非要允许你设置一个大的值然后就无法启动)

不管怎样,至此,错误的原因好歹是找到了。


于是,我们很容易就能想到,Pycharm启动的时候需要读取配置文件,先读到这个参数(ReservedCodecacheSize)的大小,我们只要修改配置文件里的这个参数即可。

首先,通过Pycharm官网查询,Pycharm的配置文件名为固定的,pycharm64.exe.Vmoptions 这个文件,我们刚才安装目录的那个文件夹下就有这个文件,然而一般Pycharm启动时查询的配置文件并不是安装目录下的这个pycharm64.exe.Vmoptions,而是在C盘。

对于老版的Pycharm如2019.2,一般是在这个目录下:

C:\Users\用户名\.PyCharm版本\config\pycharm64.exe.vmoptions

而对于新版的Pycharm(一般2021以上的版本),是在这个目录下:

C:\Users\用户名\AppData\Roaming\JetBrains\PyCharm版本

例如我的就是在这个目录下面:

C:\Users\33038\AppData\Roaming\JetBrains\PyCharm2021.1

我们可以看到这里也有个pycharm64.exe.Vmoptions文件

 一般情况下,这个就是Pycharm启动的配置文件,用记事本打开该文件,

 将其中的ReservedCodeCacheSize这个参数的值改成小于等于2048M的值即可,另外,如果上面的Xms和Xmx两个参数如果过大的话,也可以适当改小。具体文件内容可参考:

-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off

但是,问题又来了,虽然一般情况下改这个配置文件问题就得以解决了。但我遇到的情况是,改这个配置文件也没用,在命令行像刚才一样继续执行一次pacharm.bat,可以明确的看到,这个参数还是设置成了4096M,也就是说,改动了这个文件没起作用。Pycharm启动的时候还是读取到了4096M这个数值,那么我们又很自然而然的能想到,一定存在另一个这样的配置文件,Pycharm启动的时候读到了其他的这样一个配置文件,而不是读取的我们之前这两个文件夹里的。

但是,怎么找到这个文件呢,其实有个傻瓜式的做法就是,根据pycharm64.exe.Vmoptions这个名字或者.Vmoptions这个后缀进行全盘搜索,管它C盘D盘,只要是这个文件就全部打开检查一遍,但这显然显示不出咱计算机人的专业性(狗头)。

于是又想到了刚才的那个安装目录里的pycharm.bat文件,既然启动Pycharm就需要运行这个脚本,那么配置文件的路径自然也应该写在这个脚本文件里面。于是我们打开它:

 在里面搜索刚才的Vmoptions这个关键字,可以发现很多相关的语句。

 

 然后我们发现,它们都和"%VM_OPTIONS_FILE%"这个环境变量有关。

 于是我们打开电脑系统属性的环境变量:

 果然存在这个环境变量,而指向的位置,则是D盘另一个文件,文件名也pycharm.vmoptions,至此,答案终于水落石出,实际上Pycahrm启动时读取的配置文件正是这个环境变量指向的文件,然后像前面提到的,打开这里的这个文件,将其中ReservedCodeCacheSize这个参数的值改成小于等于2048M的值,问题就得以完美解决。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值