0

我们在 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);
            }
        });

    }
}
4

0 回答 0