GWT リリースで見つかりました:
GWT-2.4.0
OS / ブラウザで発生:
Windows 7 と IE9
詳細な説明 (できるだけ具体的に記入してください):
GWT アプリを一晩実行するために残した後、ヒープ不足の例外が発生しました。MemoryAnalyzer を使用した診断では、クラッシュ時に com.google.gwt.http.client.RequestBuilder のインスタンスが 160 万個あり、各サイズが正確に 1208 バイトであることがわかりました。
さらに調べてみると、これらのリクエストはサーバーへの GWT Action 呼び出しであり、現在のサーバーのヘルス ステータスをポーリングするものであることがわかりました。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
- 評判から投稿までの 10 のルールをありがとう