2014-10-07 145 views
-3
java.lang.OutOfMemoryError: Java heap space 
     at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.<init>(UTF8Reader.java:122) 
     at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.createReader(XMLEntityManager.java:2344) 
     at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:684) 
     at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649) 
     at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203) 
     at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175) 
     at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:140) 
     at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:123) 
     at org.glassfish.jersey.message.internal.XmlRootElementJaxbProvider.readFrom(XmlRootElementJaxbProvider.java:140) 
     at org.glassfish.jersey.message.internal.AbstractRootElementJaxbProvider.readFrom(AbstractRootElementJaxbProvider.java:122) 
     at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:239) 
     at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:211) 
     at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:139) 
     at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1109) 
     at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:853) 
     at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:785) 
     at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:267) 
     at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:111) 
     at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
     at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
     at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
     at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:397) 
     at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:108) 

我的堆空间是-Xmx256m。这是这个问题的原因吗?如果它增加到-Xmx2g,它可能会在更多时间后失败。但我不认为这是正确的解决方案。请帮忙。java.lang.OutOfMemoryError:Java堆空间

+1

你是否对应用程序进行了简介以查看内存在哪里使用?如果不是,那将是一个好的第一步。 – berry120 2014-10-07 15:21:22

+0

你的XML文件有多大?从我看到的情况来看,它会尝试分配一个缓冲区来读取您的XML文件,并且内存不足。 – 2014-10-07 15:22:24

+1

你大概在这种情况发生时读取一个XML文件。如果XML文件不断增长,那么是的,在将XML文件大小增加八倍后,它可能会因-Xmx2g而失败。但是,如果XML文件的大小是恒定的或已知的,那么您可以找出最多需要多少内存。 – 2014-10-07 15:23:06

回答

3

是的。堆正被过度分配。解决其他问题然后增加堆空间的唯一方法是查看所有堆空间的使用情况,然后尝试确保收集的对象可以保持更长的时间,然后才需要它们。如果它是一个文件或某些无法收集的文件,导致堆空间不足,则应重新设计程序,如果文件大小不恒定并且不断变化。如果它们不变,只需增加文件大小以上的堆空间。

相关问题