2014-10-07 4 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

+0

XML 파일의 크기는 얼마입니까? 내가 본 것으로부터, XML 파일을 읽는 버퍼를 할당하려고 시도하고 메모리가 부족합니다. –

+1

이런 일이 발생하면 아마도 XML 파일을 읽을 것입니다. XML 파일이 계속 증가하면 XML 파일 크기를 8 배로 늘린 후 -Xmx2g와 함께 실패 할 수 있습니다. 그러나 XML 파일 크기가 일정하거나 알려졌다면 필요한 메모리 양을 알아낼 수 있습니다. –

답변

3

예입니다. 힙이 너무 많이 할당되었습니다. 다른 힙 공간을 늘리는 유일한 방법은 모든 힙 공간을 사용하는 것을 확인한 다음 필요 이상으로 오래 머무르는 오브젝트를 수집 할 수 있는지 확인하는 것입니다. 그것이 힙 공간이 부족하게 만드는 파일이나 수집 할 수없는 것이라면 파일 크기가 일정하지 않고 계속 변경되는 경우 프로그램을 다시 작성해야합니다. 상수 일 경우 파일 크기보다 큰 힙 공간을 늘리십시오.

관련 문제