我们在 Windows 7、ie9(但不是 ie8 或 ie10)和 gwt 2.5 中遇到了这个问题。
我们将问题归结为以下非常小的代码示例,它不进行 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);
}
});
}
}