#java #performance #javafx-2 #hsqldb
#java #Производительность #javafx-2 #hsqldb
Вопрос:
Я использовал HSQLDB для хранения данных в моем приложении. Я выполняю 15 вызовов веб-службы один за другим. и сохраняйте данные в БД. Он отлично работает для минимального объема данных. Я получил OME (ошибка нехватки памяти) для больших данных. Я имею в виду, предположим, что у меня около 20 тысяч записей для метода веб-службы.Итак, мы получаем OME при сохранении данных в БД. Я также пытался использовать функцию профилировщика, но не могу найти, какой объект потреблял больше памяти кучи. Итак, я попал сюда. Мне нужна чья-нибудь помощь, чтобы решить эту проблему.
Code
try {
JSONObject jSONObject = getJSONData(clientId, ApplicationConstants.REST_METHOD_GET_ALL_CATEGORIES_LIST_BY_CLIENT_ID);
if (jSONObject != null) {
JSONArray jSONArray = jSONObject.getJSONArray(ApplicationConstants.JSON_OBJECT_RESPONSE);
Integer length = jSONArray.length();
if (length == 0) {
if (_logger.isInfoEnabled()) {
_logger.info("Categories not found for client {}", clientId);
}
} else {
if (_logger.isInfoEnabled()) {
_logger.info("{} Categories found for client {}", length, clientId);
}
SyncDao synDao = (SyncDao) getDAO(ApplicationConstants.REST_SYNC_DAO);
for (int i = 0; i < length; i ) {
JSONObject jSONObj = jSONArray.getJSONObject(i);
ProjectMenu projectMenu = new ProjectMenu();
projectMenu.setClientId(clientId);
projectMenu.setCategory(ApplicationConstants.PROJECT_MENU_CATEGORY_SUB_MENU);
projectMenu.setCategoryType(ApplicationConstants.CATEGORY_TYPE_CATEGORY);
projectMenu.setCreatedDate(jSONObj.getString(ApplicationConstants.REST_CATEGORY_CREATED_DATE));
projectMenu.setElementId(jSONObj.getString(ApplicationConstants.REST_CATEGORY_ID));
projectMenu.setIsLeaf(Boolean.FALSE);
projectMenu.setLabel(jSONObj.getString(ApplicationConstants.REST_CATEGORY_NUMBER));
projectMenu.setLevel(new Integer(4));
projectMenu.setSortOrder(jSONObj.getInt(ApplicationConstants.REST_CATEGORY_SORT_ORDER));
// Getting parent menu details
ProjectMenu parentProjectMenu = synDao.getProjectMenu(clientId,
jSONObj.getString(ApplicationConstants.REST_CATEGORY_PROJECT_COMPONENT_ID), ApplicationConstants.CATEGORY_TYPE_COMPONENT);
if (parentProjectMenu != null) {
if (ApplicationConstants.REST_NO_COMPONENT_LABEL.equalsIgnoreCase(parentProjectMenu.getLabel())) {
projectMenu.setParentMenuId(parentProjectMenu.getParentMenuId());
} else {
projectMenu.setParentMenuId(parentProjectMenu.getId());
}
projectMenu.setProjectId(parentProjectMenu.getProjectId());
}
if (_logger.isDebugEnabled()) {
_logger.debug("Persisting Category: {}", projectMenu.toString());
}
synDao.persist(projectMenu);
}
}
}
} catch (JSONException jsonex) {
if (_logger.isErrorEnabled()) {
_logger.error("Exception while synchronizing Categories.", jsonex);
}
}
Комментарии:
1. Подождите .. вы извлекаете все записи из таблицы или что? Я не понимаю вашего вопроса.
2. Я извлекаю данные из базы данных с помощью метода веб-службы, а затем сохраняю их в HSQLDB.
Ответ №1:
Использование таблиц ПАМЯТИ часто является причиной ошибок ООМ, когда объем данных в базе данных увеличивается.
Преобразуйте таблицы, содержащие большие объемы данных, в КЭШИРОВАННЫЕ таблицы, и ошибок ООМ больше не будет.
SET TABLE t TYPE CACHED