我们在使用gwt 2.5的Windows 7,ie9(但不是ie8或ie10)时遇到过这个问题。
我们将问题归结为以下非常小的代码示例,它不执行dom操作并且不对返回的数据执行任何操作,它只是一个rpc调用,返回从计时器调用的字符串。
泄漏的大小与从Rpc调用返回的字符串的大小成比例。返回一个非常大的字符串可以在几分钟内发送超过1Gb的9个内存使用量!因为显而易见的原因,32位即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);
}
});
}
}