Cordova 无法为 2097152KB 对象堆保留足够的空间

Posted

技术标签:

【中文标题】Cordova 无法为 2097152KB 对象堆保留足够的空间【英文标题】:Cordova Could not reserve enough space for 2097152KB object heap 【发布时间】:2017-05-04 04:05:05 【问题描述】:

我是 cordova 的新手,正在尝试创建一个 android HelloWold 项目。

当我使用cordova platforms add android 时,它会抛出一些异常:

D:\CordovaSpace\helloWorld>cordova platforms add android
Adding android project...
Creating Cordova project for the Android platform:
        Path: platforms\android
        Package: com.example.helloworld
        Name: HelloWorld
        Activity: MainActivity
        Android target: android-24
Subproject Path: CordovaLib
Android project created with cordova-android@6.0.0
Installing "cordova-plugin-whitelist" for android
ANDROID_HOME=D:\Java_Android_SDK\android_sdk
JAVA_HOME=C:\Program Files (x86)\Java\jdk1.8.0_73
Subproject Path: CordovaLib
Starting a new Gradle Daemon for this build (subsequent builds will be faster).

FAILURE: Build failed with an exception.

* What went wrong:
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html
Please read the following process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Failed to install 'cordova-plugin-whitelist':Error: cmd: Command failed with exit code 1
    at ChildProcess.whenDone (D:\CordovaSpace\helloWorld\platforms\android\cordova\node_modules\cordova-common\src\superspawn.js:169:23)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:850:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
Error: cmd: Command failed with exit code 1

【问题讨论】:

我们可以再给你一些内存吗? 我认为你缺少 2 GB 内存 那我该怎么办? (请原谅我英语说得不太好) 购买更多内存?你现在有多少? @ScaryWombat 很容易被讽刺!我的系统有 9Gb 的可用内存,但我仍然遇到同样的问题。 【参考方案1】:

增加 Java VM(?) 内存大小后重试。

这是在 Windows 平台上修复它的方法:

转到开始 -> 控制面板 -> 系统 -> 高级(选项卡) -> 环境变量 -> 系统变量 -> 新建: 变量名:_JAVA_OPTIONS 变量值:-Xmx512M

不要忽略分数和下划线字符。

【讨论】:

添加本地或用户环境变量 _JAVA_OPTIONS 也可以。 source ? 这对我来说就像一个魅力,但在重新启动 cli 之后。 像魅力一样工作! 这对我有用,但在那之后,我无法再打开 Eclipse。【参考方案2】:

我遇到了完全相同的问题。我按照here 中的建议切换到使用 64 位 JDK,它运行良好。我在 Windows 10 上使用 Ionic 3.5.0。

【讨论】:

【参考方案3】:
args.push('-Dorg.gradle.jvmargs=-Xmx2048m') 
into 
args.push('-Dorg.gradle.jvmargs=-Xmx1024m');

在以下位置文件上。

    项目文件夹\平台\android\cordova\lib\builders\GradleBuilder.js

    项目文件夹\平台\android\cordova\lib\builders\StudioBuilder.js

【讨论】:

【参考方案4】:

这适用于我的 ionic 应用程序。

换行

// to allow dex in process
'org.gradle.jvmargs': '-Xmx1024m',

来自

// to allow dex in process
'org.gradle.jvmargs': '-Xmx2048m',

在你的

<app path>\platforms\android\cordova\lib\config

谢谢

【讨论】:

谢谢,你的回答解决了我的问题,我被困了3天。我应用了许多不同的东西。但忽略您的答案,因为分数较低。谢谢【参考方案5】:

转到:\platforms\android\cordova\lib\config\GradlePropertiesParser.js

constructor (platformDir) 
        this._defaults = 
            // 10 seconds -> 6 seconds
            'org.gradle.daemon': 'true',

            // to allow dex in process
            'org.gradle.jvmargs': '-Xmx2048m',

            // allow NDK to be used - required by Gradle 1.5 plugin
            'android.useDeprecatedNdk': 'true'

            // Shaves another 100ms, but produces a "try at own risk" warning. Not worth it (yet):
            // 'org.gradle.parallel': 'true'
        ;

并将'org.gradle.jvmargs': '-Xmx2048m', 更改为'org.gradle.jvmargs': '-Xmx1024m',

【讨论】:

【参考方案6】:
args.push('-Dorg.gradle.jvmargs=-Xmx2048m') 
 to  
args.push('-Dorg.gradle.jvmargs=-Xmx1024m');

在以下位置文件上。

    项目文件夹\platforms\android\cordova\lib\builders\builders.js 项目文件夹\platforms\android\cordova\lib\builders\GradleBuilder.js 项目文件夹\平台\android\cordova\lib\builders\StudioBuilder.js

【讨论】:

【参考方案7】:

转到Start -&gt; Control Panel -&gt; System -&gt; Advanced(tab) -&gt; Environment Variables -&gt; System Variables

添加/更改JAVA_HOME from C:\Program Files (x86)\Java\jdk1.8.0_192 to C:\Program Files\Java\jdk1.8.0_192

即从Program Files (x86)路径更改为Program Files路径。

【讨论】:

如果没有64位版本,请安装。 以上评论解决了我的问题。 Java_Home 指向 32 位版本。 很高兴知道它有帮助。【参考方案8】:

我遇到了同样的问题。

无论如何,这里是如何解决它: 转到开始->控制面板->系统->高级(选项卡)->环境变量->系统变量->新建: 变量名:_JAVA_OPTIONS

变量值:-Xmx512M

如果 512 不起作用,则将其更改为。

变量值:-Xmx1024M

还有改变路径。

变量名:路径

变量值:;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

将此更改为您的适当路径。

【讨论】:

【参考方案9】:

像@kemal 的解决方案一样在系统级别设置环境变量将为系统中的所有 JVM 应用程序设置内存大小,这不是大多数人想要做的。

改为在您的 cordova gradlebuilder 属性文件中设置堆大小。

args.push('-Dorg.gradle.jvmargs=-Xmx2048m');

【讨论】:

你的意思是project/platforms/android/build.gradle

以上是关于Cordova 无法为 2097152KB 对象堆保留足够的空间的主要内容,如果未能解决你的问题,请参考以下文章

让java明白swap存在,并鼓励他使用它[关闭]

无法为对象堆保留足够的空间:Android Studio

Error occurred during initialization of VM Could not reserve enough space for 2097152KB object heap(

Android:java.lang.OutOfMemoryError:无法分配 23970828 字节分配,2097152 空闲字节和 2MB 直到 OOM

ionic cordova build android --prod 使 JavaScript 堆内存不足

PHP致命错误:允许的内存大小为2097152字节已用尽