Я пытаюсь перебрать массив 2-D
с размерами 12000 * 20
, и я постоянно получаю java.lang.OutOfMemoryError.
Сначала я подумал, что это может быть из-за размера кучи, поэтому я увеличил размер кучи, но все равно получал ту же ошибку. Итак, я запустил такой сборщик мусора:
<cflock name="checkMemory" type="exclusive" timeout="1" throwontimeout="yes">
<cfset objSystem = CreateObject( "java", "java.lang.System" )>
<cfset objSystem.gc()>
</cflock>
и я сбросил свободную память, которая была около 850MB
:
<cfset runtime = CreateObject("java","java.lang.Runtime").getRuntime()>
<cfset freeMemory = runtime.freeMemory()>
<cfdump var="#freeMemory#" label="free">
Здесь я пытаюсь создать переменную XML, и во время цикла получаю ошибку кучи:
<cfxml variable="variables.XML">
<cfoutput>
<ROWS>
<cfloop from="3" to="#arrayLen(local.array)#" index="i" step="1">
<ROW>
<cfloop from="1" to="#arrayLen(local.array[2])#" index="j" step="1">
<#ucase(local.array[2][j])#>
<![CDATA[#trim(local.array[i][j])#]]>
</#ucase(local.array[2][j])#>
</cfloop>
</ROW>
</cfloop>
</ROWS>
</cfoutput>
</cfxml>
Это трассировка стека:
Есть ли лучшее решение, чтобы избежать такого зацикливания или устранить эту ошибку?
Я создал страницу cfm локально и добавил в нее следующие переменные:
Каждый раз, когда я обновлял эту страницу, размер свободной памяти уменьшался, пока я не запустил сборщик мусора. Я все еще пытаюсь понять, почему это происходит. Есть предложения по этому поводу?
<cfset runtime = CreateObject("java","java.lang.Runtime").getRuntime()>
<cfset freeMemory = runtime.freeMemory()>
<cfset totalMemory = runtime.totalMemory()>
<cfset maxMemory = runtime.maxMemory()>
<cfdump var="#freeMemory#" label="free">
<cfdump var="#totalMemory#" label="total">
<cfdump var="#maxMemory#" label="max">
Пожалуйста помоги. Заранее спасибо.
После предложений Адама Кэмерона, Dan Bracuk и Джеймс Моберг, я сделал следующее, и я не получаю ошибка кучи сейчас. Я подозреваю, что это было из-за тега 2-D
, но не уверен.
array[2][j]
. И _2_ тоже динамичный. Так что мне нужно зацикливаться. Можно ли это сделать лучше? - person duncan   schedule 24.03.2015