0
我不得不承認我對ANT不熟悉,也沒有寫下面的大部分代碼刮。我試圖做的是循環遍歷一個文件名列表,這些文件名保存在一個用逗號分隔的文件中。代碼執行得很好,直到它到達第1400個文件名的某處。對於每個文件名,它調用一個執行查詢的java過程來檢索pdf文件並將其保存到本地。我相信它可能會耗盡內存,因爲在Java過程中打開的連接沒有關閉,但我確認它是。所以我認爲它歸因於文件名列表太大。關於如何處理大型列表的任何想法?在ANT中循環遍歷大列表的for循環導致java.lang.OutOfMemoryError:無法創建新的本地線程
我拿到後周圍的第1400次迭代的錯誤是java.lang.OutOfMemoryError:無法創建新的本地線程
感謝。
<for list="${filenames}" delimiter="," param="filename">
<sequential>
<propertyregex override="yes" property="trimmedname" input="@{filename}" regexp="[\s]*([^\s].*[^\s])[\s]*" replace="\1"/>
<if>
<and>
<length string="${trimmedname}" trim="true" when="greater" length="0" />
<not><equals arg1="${trimmedname}" arg2="$${filenames}" /></not>
</and>
<then>
<java classname="LOBExtract" failonerror="true" fork="true" maxmemory="512m">
<arg value="DBSERVER=${server_name}"/>
<arg value="DBPORT=${oracle_port}"/>
<arg value="DBSID=${oracle_sid}"/>
<arg value="DBUSER=${dbuser}"/>
<arg value="DBPASSWORD=${dbpassword}"/>
<arg value="TABLE=BLOB_DATA"/>
<arg value="LOBFIELD=BLOB_DATA"/>
<arg value="WHERE=blob_id=${trimmedname}"/>
<arg value="FILENAME=${output_dir}/aircraft/esig/files/${trimmedname}.pdf"/>
<classpath>
<pathelement location="."/>
<pathelement path="${basedir}"/>
<pathelement path="${basedir}/resource/ojdbc14.jar"/>
</classpath>
</java>
</then>
</if>
</sequential>
</for>
是否刪除'fork =「true」'改變任何東西? – doublep 2012-03-08 22:56:30
你可以給更多的內存,比如maxmemory =「1200m」。 Ant是否提供OOM或LOBExtract? – Jayan 2012-03-09 05:20:55
螞蟻正在給OOM。它呼籲LOBExtract說它不能創建一個新的線程崩潰。 – noghead 2012-03-09 15:21:15