この問題は、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);
}
});
}
}