Beg*_*ner 6 heap coldfusion coldfusion-9 cfloop
我试图循环一个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>
Run Code Online (Sandbox Code Playgroud)
我倾倒了周围的空闲记忆850MB:
<cfset runtime = CreateObject("java","java.lang.Runtime").getRuntime()>
<cfset freeMemory = runtime.freeMemory()>
<cfdump var="#freeMemory#" label="free">
Run Code Online (Sandbox Code Playgroud)
在这里,我试图创建一个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>
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
java.io.WinNTFileSystem.getBooleanAttributes(Native Method)的java.lang.OutOfMemoryError,位于coldfusion的coldfusion.xml.XmlProcessor.getSourceURL(XmlProcessor.java:246)的java.io.File.exists(File.java:733). xml.XmlProcessor.parse(XmlProcessor.java:155)在coldfusion.tagext.lang.XmlTag.doEndTag(XmlTag.java:85)在cffeeds2ecfc1003675922 $ funcDEMO1._factor8(C:\部件\ abc.cfc:1235)在cffeeds2ecfc1003675922 $在coldfusion的coldfusion.runtime.UDFMethod $ ReturnTypeFilter.invoke(UDFMethod.java:405)的coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)的funcDEMO1.runFunction(C:\ component\abc.cfc:1192). runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)在coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)在coldfusion.runtime.UDFMethod .invoke(UDFMethod.java:220)at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2582)at cffeeds2ecfc1003675922 $ funcDEMO.runFunction(\ comp onent\abc.cfc:935)在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)在coldfusion.runtime.UDFMethod $ ReturnTypeFilter.invoke(UDFMethod.java:405)在coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke (UDFMethod.java:368)coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java: 517)在coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:496)的coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:355)和coldfusion的coldfusion.filter.ComponentFilter.invoke(ComponentFilter.java:188). filter.ApplicationFilter.invoke(ApplicationFilter.java:374)在coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)在coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)在coldfusion.filter.PathFilter.invoke (pathFilter.java:94)在coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)a t coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28),位于coldfusion.filter的coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38),位于coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46). GlobalsFilter.invoke(GlobalsFilter.java:38)位于coldfusion.xml.rpc.CFC服务(冷却文件中),位于coldfusion.xml.rpc.CFCS服务网站上的coldfusion.xml.rpc.CFCServlet.invoke(CFCServlet.java:139) .doPost(CFCServlet.java:290)位于javax的org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)的javax.servlet.http.HttpServlet.service(HttpServlet.java:760). servlet.http.HttpServlet.service(HttpServlet.java:853)位于com.intergral.fusionreactor的jrun.servlet.FilterChain.doFilter(FilterChain.java:86)的coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) .filter.FusionReactorFilter.i(FusionReactorFilter.java:566)at com.intergral.fusionreactor.filter.FusionReactorFilter.c(FusionReactorFilter.jav)一:258)在com.intergral.fusionreactor.filter.FusionReactorFilter.doFilter(FusionReactorFilter.java:164)在jrun.servlet.FilterChain.doFilter(FilterChain.java:94)在coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter .java:42)在jrun.servlet.FilterChain.service(FilterChain.java:101)的jrun.servlet.FilterChain.doFilter(FilterChain.java:94)的coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)在jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)的jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)jrun.servlet. ServletEngineService.dispatch(ServletEngineService.java:543)在jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)在jrunx.scheduler.ThreadPool $ DownstreamMetrics.invokeRunnable(ThreadPool.java:320)在jrunx.scheduler.ThreadPool $ threadThrottle.invokeRunnable(ThreadPool.java:428)at jrunx.scheduler.Thr eadPool $ UpstreamMetrics.invokeRunnable(ThreadPool.java:266)at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
有没有更好的解决方案来避免这样的循环或解决此错误?
我在本地创建了一个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">
Run Code Online (Sandbox Code Playgroud)
每次刷新此页面时,可用内存大小都会减少,直到我运行GC.我仍在试图弄清楚为什么会这样.对此有何建议?
请帮忙.提前致谢.
根据Adam Cameron、Dan Bracuk和James Moberg的建议,我做了以下操作,现在没有收到堆错误。我怀疑这是因为CFXML标签,但不确定。
将 的所有元素转换array[2]为大写:
<cfloop from="1" to="#arrayLen(local.array[2])#" index="i" step="1">
<cfset local.array[2][i] = ucase(local.array[2][i])>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
然后使用cfsavecontent生成 xml 字符串:
<cfsavecontent variable="local.xmlString">
<?xml version="1.0" encoding="UTF-8"?>
<ROWS>
<cfoutput>
<cfloop from="3" to="#arrayLen(local.array)#" index="local.currentRow" step="1">
<ROW>
<cfloop from="1" to="#arrayLen(local.array[2])#" index="local.currentColumn" step="1">
<#local.array[2][local.currentColumn]#>
<![CDATA[#trim(local.array[local.currentRow][local.currentColumn])#]]>
</#local.array[2][local.currentColumn]#>
</cfloop>
</ROW>
</cfloop>
</cfoutput>
</ROWS>
</cfsavecontent>
<cfset local.xml = xmlParse(local.xmlString)>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |