2010-11-05 73 views
0

我在Eclipse中創建了一個Java應用程序,當我將-Xmx1024m的VM參數增加時運行良好。當我嘗試使用以下路徑通過命令promt運行應用程序時:使用Python爲我的Java應用程序增加虛擬內存的問題

c:\ python27 \ python c:\ jars2run \ run.py c:\ jars2run \ myown \ ClassTree.jar LiveSimulator2/Live_PairsEngine3 java -Xmx1024m

我收到以下錯誤信息:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.nio.CharBuffer.wrap(Unknown Source) 
at java.nio.CharBuffer.wrap(Unknown Source) 
at java.lang.StringCoding$StringDecoder.dec… Source) 
at java.lang.StringCoding.decode(Unknown Source) 
at java.lang.String.<init>(Unknown Source) 
at java.lang.String.<init>(Unknown Source) 
at com.mysql.jdbc.ResultSet.getStringIntern… 
at com.mysql.jdbc.ResultSet.getString(Resul… 
at com.mysql.jdbc.ResultSet.getString(Resul… 
at LiveSimulator2.Timeseries2.<init>(Timese… 
at LiveSimulator2.Live_PairsEngine3.main(Li… 

我發現我需要添加在Python腳本中的堆內存要求,但不能找出其中的素文字我已經把公司的Java -Xmx1024m'或者什麼是需要的,因此java應用程序由於內存不足而仍然崩潰。

請參閱下面的python腳本,目前python腳本只是複製外部jar需要運行我的java應用程序。

import sys 
import os 

classfile=sys.argv[2]; 
jar=sys.argv[1]; 
cp='%s' % jar 
FILES=os.listdir('c:/jars2run/3rdparty'); 
os.chdir('c:/jars2run/3rdparty'); 
for i in FILES: 
    if (i.endswith('jar')): 
     cp='%s;%s' % (cp, i) 

cmd='java -classpath "%s" %s' % (cp, classfile) 
print('%s' % cmd) 
os.system(cmd) 

有人可以讓我知道增加內存需要去哪裏請。

非常感謝您的幫助。

回答

2

改變這一行:

cmd='java -classpath "%s" %s' % (cp, classfile) 

cmd='java -Xmx1024m -classpath "%s" %s' % (cp, classfile) 

BTW:Python的一些指針:

  1. 你並不需要在線路的兩端分號,並您不需要在括號中包含if條件。

  2. 如果你的格式字符串只是"%s",那麼你沒有通過格式化獲得任何東西,只是使用字符串原樣。

  3. 您可以附加到+=的字符串。

  4. Python stdlib包含glob模塊,用於查找具有shell通配符模式的文件。

使用這些(和其他幾個人),我們可以清理你的腳本:

import sys 
import os 
import glob 

cp = sys.argv[1] 
classfile = sys.argv[2] 
os.chdir('c:/jars2run/3rdparty') 
for f in glob.glob("*.jar"): 
    cp += ';%s' % f 

cmd = 'java -classpath "%s" %s' % (cp, classfile) 
print(cmd) 
os.system(cmd) 
+0

是。問題提出者的解釋:除非您明確寫入代碼,否則命令行參數不會從一個程序轉移到另一個程序。 (但是,環境變量通常會繼續存在 - 但同樣,這取決於您如何對其進行編碼 - 您可以選擇不執行它們。) – 2010-11-05 11:44:31

相關問題