2017-06-20 77 views
1

我有一個Android Intellij 2017開發的Flex/AIR應用程序。當我嘗試在我的手機上調試它時,我不斷收到內存不足錯誤。似乎無法增加intellij在windows上的java堆大小

dx tool failed: 
UNEXPECTED TOP-LEVEL ERROR: 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.BitSet.initWords(BitSet.java:166) 
    at java.util.BitSet.<init>(BitSet.java:161) 
    at com.android.dx.ssa.SsaBasicBlock.<init>(SsaBasicBlock.java:128) 
    at com.android.dx.ssa.SsaBasicBlock.newFromRop(SsaBasicBlock.java:147) 
    at com.android.dx.ssa.SsaMethod.convertRopToSsaBlocks(SsaMethod.java:173) 
    at com.android.dx.ssa.SsaMethod.newFromRopMethod(SsaMethod.java:103) 
    at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:44) 
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:98) 
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:72) 
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:297) 
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:137) 
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93) 
    at com.android.dx.command.dexer.Main.processClass(Main.java:734) 
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:678) 
    at com.android.dx.command.dexer.Main.access$300(Main.java:83) 
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:607) 
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 
    at com.android.dx.command.dexer.Main.processOne(Main.java:637) 
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:511) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:281) 
    at com.android.dx.command.dexer.Main.run(Main.java:247) 
    at com.android.dx.command.dexer.Main.main(Main.java:215) 
    at com.android.dx.command.Main.main(Main.java:106) 

它顯示我的命令,用於:

DT command line: D:\Program Files\JetBrains\IntelliJ IDEA 2017.1.2\jre64\bin\java.exe .... ... -Xmx512m -jar ... ... 

擦除最,但它表明,它的使用512米的記憶。我已經進入編譯器設置並將「生成進程堆大小」選項設置爲2056,但這沒有幫助。我還添加了一個值爲「-Xms128 -Xmx2056m」的JAVA_OPTS變量

我不確定Intellij獲取該設置以更改它的位置。

任何幫助表示讚賞,感謝

編輯

這裏是獲取運行原來的命令,不管是什麼我一直如此VAR它總是說-Xmx512m

D:\<path_to_intellij>\java.exe -Dapplication.home=D:\<path_to_flex_sdk> -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Duser.language=en -Duser.region=en -Xmx512m -jar D:\<path_to_flex_sdk>\lib\adt.jar -package -target apk-debug -listen 7936 -storetype PKCS12 -keystore D:\<path_to_key_file> -storepass <password> D:\<output_path>\GROL.apk 

編輯2

如果我把命令giv en從Intellij IDEA中運行並在命令行上手動運行,並將512更改爲更高版本。 IntelliJ中似乎沒有設置這個特定的動作。我將不得不在IntelliJ論壇上發帖,也許會在那裏獲得一些開發人員的幫助。如果他們的反應,我會回答它在這裏

+0

我的猜測是,這個想法本身需要更多的內存,你可以試試[官方文件]中描述的步驟(https://www.jetbrains.com/help/ idea/2017.1/increase-memory-heap.html),看看它們是否適合你? – BackSlash

+0

我試圖編輯一個自定義的vmoptions文件,這也不起作用。安裝文件夾中的默認文件顯示-Xmx750m和-Xms128m。因此,不是命令行中的512 – kamcknig

回答

0

你可以在這裏改變它(Actionscript & Flex編譯堆大小):

flex heap

+0

我會給它一個鏡頭,但我認爲這不會起作用,因爲SWF的編譯工作得很好,它是根據您的應用程序打包到APK中的失敗 – kamcknig

+0

@kamcknig,具體取決於您的Flex SDK版本,[以下內容](http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7fd9.html#WS2db454920e96a9e51e63e3d11c0bf5fb32-7ff3)可能工作('SDK/bin/jvm.config','java .args = -Xmx1024m')。 – CrazyCoder

+0

這將改變它的mxmlc編譯器,但不是的ADT打包程序 – kamcknig

0

您可以從的IntelliJ菜單欄添加此設置,請轉到Help > Edit Custom VM Options...,這會從安裝文件夾中創建現有/bin/idea.exe.vmoptions/bin/idea64.exe.vmoptions文件的副本,它會打開編輯。

您可以使用-Xms<initial heap size> -Xmx<maximum heap size>,例如,最後的文件應該是這樣的:

# custom IntelliJ IDEA VM options 

-Xms750m 
-Xmx2048m 
-XX:ReservedCodeCacheSize=240m 
-XX:+UseCompressedOops 

對於更改生效來重新啓動是必要的IntelliJ

另一種方法是設置在大小Run/Debug configurations選項,要做到這一點去菜單欄Run > Edit Configurations...,並添加-Xms750m -Xmx2048mVM Options字段

+0

這不影響編譯器設置。 – CrazyCoder

+0

vmoptions是Intellij使用多少內存,而不是構建過程,雖然我已編輯該文件,並且錯誤和命令行的輸出仍顯示「-Xmx 512m」。對於運行/調試配置;即編譯器,但這是一個flex/air項目,它使用mxmlc進行編譯,並且不需要太多的內存,可以工作。它使用adt打包工具失敗 – kamcknig