因此在嘗試通過Turbine servlet使用Velocity渲染頁面時出現此錯誤。事情是我有很多內存,並且servlet本身從不崩潰。它只是在這個請求失敗。它試圖呈現的頁面可能是10M。Java堆內存不足
任何人有任何想法/建議嗎?在頂部
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2271) at
java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113) at
java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) at
sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282) at
sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125) at
sun.nio.cs.StreamEncoder.write(StreamEncoder.java:135) at
java.io.OutputStreamWriter.write(OutputStreamWriter.java:220) at
java.io.Writer.write(Writer.java:157) at
org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:321)
at
org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:94)
at
org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:109)
at
org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:94)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:271)
at
org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:128)
at
org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:94)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:271)
at
org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:128)
at
org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:271)
at org.apache.velocity.Template.merge(Template.java:296) at
org.apache.velocity.app.Velocity.mergeTemplate(Velocity.java:492) at
org.apache.velocity.app.Velocity.mergeTemplate(Velocity.java:461) at
org.apache.turbine.services.velocity.TurbineVelocityService.executeRequest(TurbineVelocityService.java:455)
at
org.apache.turbine.services.velocity.TurbineVelocityService.handleRequest(TurbineVelocityService.java:321)
at
org.apache.turbine.services.velocity.TurbineVelocity.handleRequest(TurbineVelocity.java:109)
at
org.apache.turbine.modules.layouts.VelocityOnlyLayout.doBuild(VelocityOnlyLayout.java:155)
at org.apache.turbine.modules.Layout.build(Layout.java:91) at
org.apache.turbine.modules.LayoutLoader.exec(LayoutLoader.java:138) at
org.apache.turbine.modules.pages.DefaultPage.doBuild(DefaultPage.java:191)
at org.apache.turbine.modules.Page.build(Page.java:91) at
org.apache.turbine.modules.PageLoader.exec(PageLoader.java:136)
JAVA_OPTS= -Xms4096M -Xmn2048M -Xmx13128M
內存使用從未得到上述100M。
它可重現嗎?如果是這樣,你能在渲染頁面之前使用Visual VM(或)JConsole找出內存細節嗎? – kosa
非常,每當我嘗試生成超過特定大小的頁面時都會發生。我大概可以解決它,但這只是令人沮喪,因爲我不明白爲什麼或如何發生。我絕對沒有用完堆空間(可能是爲那個線程或其他東西?)。 –
Arrays.java的第2271行是'byte [] copy = new byte [newLength];',但是應該允許長度爲'Integer.MAX_VALUE - 5'。我不知道這個問題,但我對此發表評論,希望它能引發某人的想法。 – Vulcan