0

この問題は、gwt 2.5 を使用する Windows 7、ie9 (ie8 または ie10 ではなく) で発生しました。

問題を次の非常に小さなコード例に要約しました。これは dom 操作を行わず、返されたデータに対して何も行いません。タイマーから呼び出された文字列を返す単なる rpc 呼び出しです。

リークのサイズは、Rpc 呼び出しから返される文字列のサイズに比例します。非常に大きな文字列を返すと、数分で 1Gb を超える 9 つのメモリ使用量が送信される可能性があります。32 ビット ie は明らかな理由で 2Gb でピークに達しますが、64 ビット ie9 はシステム内のすべてのメモリを消費します。

コードは次のとおりです。

public class TestLeak implements EntryPoint
{
    /**
     * Create a remote service proxy to talk to the server-side Greeting service.
     */
    private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);

    private static final int REFRESH_RATE_MS = 100;
    private Timer refreshTimer = null;

    /**
     * This is the entry point method.
     */
    public void onModuleLoad()
    {
        refreshTimer = new Timer()
        {

            @Override
            public void run()
            {
                makeRPCCall();

            }
        };
        refreshTimer.schedule(REFRESH_RATE_MS);
    }

    public void makeRPCCall()
    {
        greetingService.greetServer("Data", new AsyncCallback<String>()
        {
            public void onFailure(Throwable caught)
            {
            }

            public void onSuccess(String result)
            {
                refreshTimer.schedule(REFRESH_RATE_MS);
            }
        });

    }
}
4

0 に答える 0