OutOfMemoryError:java.util.Arrays.copyOfRange 处的 Java 堆空间
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18732517/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange
提问by quarks
This is the error that is thrown in the GWT DevMode console when passing an image base64 String (abour ~360KB in size) to a GWT method with String param:
这是将图像 base64 字符串(大小约为 360KB)传递给具有字符串参数的 GWT 方法时在 GWT DevMode 控制台中引发的错误:
java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:2694) at java.lang.String.(String.java:234) at java.lang.StringBuilder.toString(StringBuilder.java:405) at org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23._marshall1(MarshallerFactoryImpl.java:1310) at org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23.marshall(MarshallerFactoryImpl.java:1326) at org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23.marshall(MarshallerFactoryImpl.java:1) at org.jboss.errai.marshalling.client.marshallers.QualifyingMarshallerWrapper.doNotNullMarshall(QualifyingMarshallerWrapper.java:93) at org.jboss.errai.marshalling.client.marshallers.AbstractNullableMarshaller.marshall(AbstractNullableMarshaller.java:29) at org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$24.marshall(MarshallerFactoryImpl.java:1402) at org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$24.marshall(MarshallerFactoryImpl.java:1) at org.jboss.errai.marshalling.client.Marshalling.toJSON(Marshalling.java:83) at org.jboss.errai.enterprise.client.jaxrs.MarshallingWrapper.toJSON(MarshallingWrapper.java:32) at org.jboss.errai.enterprise.client.jaxrs.JaxrsProxyLoaderImpl$1com_myapp_client_shared_service_PasteServiceImpl.createPaste(JaxrsProxyLoaderImpl.java:194) at com.myapp.client.local.PastePage.onPasteImage(PastePage.java:257) at com.myapp.client.local.PastePage$4$1.run(PastePage.java:162) at com.google.gwt.user.client.Timer.fire(Timer.java:149) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337) at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218) at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at com.google.gwt.core.client.impl.Impl.apply(Impl.java) at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213) at sun.reflect.GeneratedMethodAccessor69.invoke(Unknown Source)
java.lang.OutOfMemoryError: Java 堆空间在 java.util.Arrays.copyOfRange(Arrays.java:2694) 在 java.lang.String.(String.java:234) 在 java.lang.StringBuilder.toString(StringBuilder.java) :405) 在 org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23._marshall1(MarshallerFactoryImpl.java:1310) 在 org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23.marshallerFactoryImpl$23.marshall12.java:1310 ) 在 org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23.marshall(MarshallerFactoryImpl.java:1) 在 org.jboss.errai.marshalling.client.marshallers.QualifyingMarshallerWrapper.doNotNullMarshall(QualifyingMarshallerWrapper.doNotNullMarshall9) .jboss.errai.marshalling.client.marshallers.AbstractNullableMarshaller.marshall(AbstractNullableMarshaller.java:29) 在 org.jboss.errai.marshalling.client.api。MarshallerFactoryImpl$24.marshall(MarshallerFactoryImpl.java:1402) 在 org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$24.marshall(MarshallerFactoryImpl.java:1) 在 org.jboss.errai.marshalling.client.JSON(JSON) Marshalling.java:83) 在 org.jboss.errai.enterprise.client.jaxrs.MarshallingWrapper.toJSON(MarshallingWrapper.java:32) 在 org.jboss.errai.enterprise.client.jaxrs.JaxrsProxyLoaderImpl$1com_myapp_client_createPasterImplax. java:194) 在 com.myapp.client.local.PastePage.onPasteImage(PastePage.java:257) 在 com.myapp.client.local.PastePage$4$1.run(PastePage.java:162) 在 com.google.gwt .user.client.Timer.fire(Timer.java:149) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl。invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at com.google.gwt.dev.shell .MethodAdaptor.invoke(MethodAdaptor.java:103) 在 com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 在 com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java :172) 在 com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337) 在 com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218) 在 com.google。 gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) at com.google.gwt。dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at com.google.gwt.core.client.impl.Impl。 apply(Impl.java) at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213) at sun.reflect.GeneratedMethodAccessor69.invoke(Unknown Source)
Looking at the logs it does not look like its a client-side issue, more of a marshalling issue.
查看日志,它看起来不像是客户端问题,更像是编组问题。
采纳答案by Gerald Horton
It simply means that the JVM ran out of memory. When this occurs, you basically have 2 choices:
这只是意味着 JVM 内存不足。发生这种情况时,您基本上有两种选择:
Allow the JVM to use more memory using the -Xmx VM argument. For instance, to allow the JVM to use 1 GB (1024 MB) of memory
Improve/Fix the application so that it uses less memory
使用 -Xmx VM 参数允许 JVM 使用更多内存。例如,允许 JVM 使用 1 GB (1024 MB) 的内存
改进/修复应用程序,使其使用更少的内存
In many cases, like in the case of a memory leak, the second option is the only sound choice. A memory leak happens when the application keeps more and more references to objects and never releases them. The garbage collector will therefore never collect those objects and less and less free memory will be available until we reach the point where not enough free memory is available for the application to function normally. At this point, the JVM will throw an OOM.
在许多情况下,例如在内存泄漏的情况下,第二个选项是唯一合理的选择。当应用程序保留越来越多的对象引用并且从不释放它们时,就会发生内存泄漏。因此,垃圾收集器永远不会收集这些对象,并且可用内存越来越少,直到我们到达没有足够的可用内存可供应用程序正常运行为止。此时JVM会抛出一个OOM。
Try this solution.
试试这个解决方案。
回答by smallfatter
suggest add the profile to capture the dump file when error occuring and using mat to analyse the finaly reason maybe helpful.
建议添加配置文件以在发生错误时捕获转储文件,并使用 mat 分析最终原因可能会有所帮助。