java - OutOfMemoryError : Java heap space at java. util.Arrays.copyOfRange

标签 java gwt errai

这是在将图像 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)

查看日志,它看起来不像是客户端问题,更像是编码问题。

最佳答案

它只是意味着 JVM 内存不足。发生这种情况时,您基本上有 2 个选择:

  • 使用 -Xmx VM 参数允许 JVM 使用更多内存。例如,允许 JVM 使用 1 GB(1024 MB)的内存

  • 改进/修复应用程序,使其使用更少的内存

在很多情况下,比如在内存泄漏的情况下,第二个选项是唯一合理的选择。当应用程序保留越来越多的对象引用并且从不释放它们时,就会发生内存泄漏。因此,垃圾收集器将永远不会收集这些对象,并且可用的可用内存会越来越少,直到我们达到没有足够的可用内存供应用程序正常运行的地步。此时,JVM 会抛出 OOM。

试试这个解决方案。

关于java - OutOfMemoryError : Java heap space at java. util.Arrays.copyOfRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18732517/

相关文章:

java - 删除 arraylist 中的元素时出现问题

java - Android + JDBC : No route to host (it works on the desktop, 为什么不在 Android 上?)

javascript - 在 gwt 项目中使用 google plus api 时,@me 被匿名错误调用

java - 此 UIObject 的元素未设置;您可能错过了对 Composite.initWidget() 或 UIObject.setElement() 的调用

java - Errai 中@Default 字段的模糊解析

java - 访问 module-info.class java.lang.IllegalArgumentException 时出现异常,Payara Server

Java:如何使用正则表达式将字符串分成几部分?

java - 序列化 GWT RPC 的 ANTLR 异常

Firefox 22 因 GWT 插件而崩溃

java - 获取服务中 Errai RequestDispatcher 的静态引用