为什么这个GWT代码在ie9上泄漏内存(但不是ie8或ie10)

时间:2013-01-18 11:17:26

标签: internet-explorer gwt memory-leaks

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

    }
}

0 个答案:

没有答案