У нас есть приложение для калитки, которое выходит из памяти. Я получаю следующую ошибку.Устранение утечки памяти в калитки
java.lang.OutOfMemoryError: GC overhead limit exceeded
Когда я взял дамп кучи, я могу увидеть следующее
Мой код выглядит, как показано ниже.
public class CommonPanel extends Panel {
private static ResourceModel SUCCESS_MESSAGE;
private static ResourceModel VALIDATE_ZERO_MSG;
private static Model<SomeInfoObject> someInfo;
public CommonPanel(String id, boolean isRedirect) {
super(id);
someInfo = Model.of();
SUCCESS_MESSAGE = new ResourceModel("successMessage");
VALIDATE_ZERO_MSG = new ResourceModel("zero.message");
Form<MyObject> form = new Form<>("myForm", new CompoundPropertyModel<>(new MyObject()));
Label successLabel= new Label("success", SUCCESS_MESSAGE);
add(successLabel.setVisible(isRedirect));
add(new Label("title", getPanelTitle(id)));
FeedbackPanel errorFeedbackPanel = new BootstrapFilteredFeedbackPanel("errorFeedbackPanel", FeedbackType.ERROR);
errorFeedbackPanel.setOutputMarkupPlaceholderTag(true);
form.add(errorFeedbackPanel);
SomeInfoPanel someInfoPanel = new SomeInfoPanel("somePanel", someInfo);
someInfoPanel.setOutputMarkupId(true);
someInfoPanel.setOutputMarkupPlaceholderTag(true);
form.add(someInfoPanel);
//...................more code here
}
@Override
public void onDetach() {
super.onDetach();
SUCCESS_MESSAGE.detach();
VALIDATE_ZERO_MSG.detach();
someInfo.detach();
}
}
public class SomeInfoPanel extends Panel {
public SomeInfoPanel(String id, IModel<SomeObject> model) {
super(id, model);
add(new FallbackLabel("name", PropertyModel.of(model, "someName"), ""));
}
}
Из того, что я читал, завершает сериализацию калитки этого класса и хранит в сеансе. Это причина этой утечки? как это предотвратить?
Как вы можете видеть выше, я использовал jMat для анализа кучи кучи. «Как эти ссылки хранятся в загрузчике классов ...» Можете ли вы немного разобраться? Вы имеете в виду, кто имеет в виду этот объект? –
Справа. Вам нужно найти путь от объекта к загрузчику классов. Таким образом, вы сможете понять, почему они не GC-ed. –