1

これは、イメージの base64 文字列 (サイズが約 360KB) を文字列パラメーターを持つ GWT メソッドに渡すときに、GWT DevMode コンソールでスローされるエラーです。

java.lang.OutOfMemoryError: java.lang.StringBuilder.toString(StringBuilder.java) の java.lang.String.(String.java:234) の java.util.Arrays.copyOfRange(Arrays.java:2694) の Java ヒープ領域:405) org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23._marshall1(MarshallerFactoryImpl.java:1310) org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23.marshall(MarshallerFactoryImpl.java:1326) ) org.jboss.errai.marshalling.client.api.MarshallerFactoryImpl$23.marshall(MarshallerFactoryImpl.java:1) で org.jboss.errai.marshalling.client.marshallers.QualifyingMarshallerWrapper.doNotNullMarshall(QualifyingMarshallerWrapper.java:93) でorg.jboss.errai.marshalling.client.api の .jboss.errai.marshalling.client.marshallers.AbstractNullableMarshaller.marshall(AbstractNullableMarshaller.java:29)。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( org.jboss.errai.enterprise.client.jaxrs.JaxrsProxyLoaderImpl$1com_myapp_client_shared_service_PasteServiceImpl.createPaste(JaxrsProxyLoaderImpl. 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(ネイティブ メソッド) at sun.reflect.NativeMethodAccessorImpl.com.google.gwt.dev.shell で java.lang.reflect.Method.invoke(Method.java:601) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で (NativeMethodAccessorImpl.java:57) .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) com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) com.google.gwt.com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) の dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 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(不明なソース)

ログを見ると、クライアント側の問題ではなく、マーシャリングの問題のようです。

4

2 に答える 2

4

これは単に、JVM がメモリ不足になったことを意味します。これが発生した場合、基本的に 2 つの選択肢があります。

  • -Xmx VM 引数を使用して、JVM がより多くのメモリを使用できるようにします。たとえば、JVM が 1 GB (1024 MB) のメモリを使用できるようにするには

  • メモリ使用量が少なくなるようにアプリケーションを改善/修正する

多くの場合、メモリ リークの場合と同様に、2 番目のオプションが唯一の適切な選択肢です。アプリケーションがオブジェクトへの参照をますます多く保持し、それらを解放しないと、メモリ リークが発生します。したがって、ガベージ コレクターはこれらのオブジェクトを収集することはなく、アプリケーションが正常に機能するのに十分な空きメモリがなくなるまで、利用できる空きメモリはますます少なくなります。この時点で、JVM は OOM をスローします。

この解決策を試してください。

于 2013-09-11T04:15:38.440 に答える