在GWT发行版中找到:
GWT - 2.4.0
在OS /浏览器上遇到:
带有IE9的Windows 7
详细说明(请尽可能具体):
出堆异常发生后,左GWT在夜间运行,用MemoryAnalyzer诊断,发现崩溃时有160万个com.google.gwt.http.client.RequestBuilder实例,每个大小正好在1208字节。
进一步的检查显示,这些请求是对服务器的GWT操作调用,用于轮询当前服务器的运行状态。每1秒由com.google.gwt.user.client.Timer轮询触发器
演示问题的最短代码片段:
@Inject
public MainPresenter(final EventBus eventBus, final MyView view,
final MyProxy proxy, PlaceManager placeManager,
final DispatchAsync dispatcher) {
super(eventBus, view, proxy);
this.placeManager = placeManager;
this.dispatcher = dispatcher;
getView().setUiHandlers(this);
setupSeverHealthQuerier(dispatcher);
}
private void setupSeverHealthQuerier(final DispatchAsync dispatcher) {
int delayInSec = UserPreference.HealthCheckInterval;
serverHealthChecker = new Timer() {
@Override
public void run() {
dispatcher.execute(new GetServerHealth(ServerName.ReplayServerGTU),
new AsyncCallback<GetServerHealthResult>() {
@Override
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
@Override
public void onSuccess(GetServerHealthResult result) {
getView().setServerHealthPic(result.getHealth());
}
});
}
};
serverHealthChecker.scheduleRepeating(delayInSec * 1000);
}这是堆报告:
http://i.stack.imgur.com/C2qJy.png
。
发布于 2012-06-01 12:44:32
它们不是RequestBuilder实例,而是匿名内部类的实例,只能是底层XMLHttpRequest的ReadyStateChangeHandler。
考虑到您的DevMode会话整晚都处于打开状态,您的计算机是否已经进入待机模式(对不起,我不知道确切的英文术语)并关闭了网络吗?
考虑到您似乎在使用IE,而且IE从不超时请求,可能是请求已经发出,但从未到达网络,也从未超时,因此类被保存在内存中。
只是个主意。
我还敢打赌这只是DevMode和IE中的一个问题。
这是对DevMode的一种非常不寻常的使用,所以我几乎不称它为bug。它也不值得修复,因为GWT团队正在开发一个新的SuperDevMode,它将不再需要浏览器插件,而是始终将代码编译成JS,即时运行。
尝试从onFailure和onSuccess重新调度计时器,而不是使用“`scheduleRepeating”。另见http://ejohn.org/blog/how-javascript-timers-work/
https://stackoverflow.com/questions/10848493
复制相似问题