Я пытаюсь настроить потребление памяти моим приложением JSF, устанавливая аргументы JVM, потому что я получаю из-за ошибки памяти.
Я могу увеличить кучу памяти и перезагружать сервер два раза в день, но это не решение ...
Аргументы JVM :
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=30
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:ParallelCMSThreads=2
-XX:+UseCMSCompactAtFullCollection
-XX:+DisableExplicitGC
-XX:MaxHeapFreeRatio=70
-XX:MinHeapFreeRatio=40
-XX:MaxTenuringThreshold=30
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:SurvivorRatio=2
-XX:PermSize=150m
-Xms1024m
-Xmx1024m
Кажется, все работает нормально, постоянное пространство составляет 0 МБ, пространство eden непрерывно очищается, но пространство выживших продолжает расти, и когда оно достигает своего предела, объект перемещается в постоянное пространство и никогда не освобождается.И через пол дня запуска приложения вылезла ошибка нехватки памятиПоэтому я должен запланировать автоматический перезапуск сервера Tomcat.
Поэтому я думаю, что в моем приложении должна быть какая-то проблема, потому что его потребление памяти слишком велико для такого маленького приложения (около тысячи перемещений в базе данных в день).
Есть часть моего кода:
Bean.java
/* save datalist */
public void save()
{
session = DaoSF.getSessionFactory.openSession();
try
{
Dao.save(dataList);
}
catch (Exception e) {...}
finally
{
session.close();
}
}
Dao.java
public static void save(List<? extends Object> dataList)
{
for (Object dataItem : dataList)
{
save(dataItem);
}
}
public static void save(Object dataItem)
{
try
{
Transaction tx = session.beginTransaction();
session.save(dataItem);
tx.commit();
}
catch(Exception e) {....}
}
DaoSF.java
public class DaoSF implements Serializable
{
private static final long serialVersionUID = 1L;
private static SessionFactory sessionFactory;
private static Session hibSession;
private static synchronized void initSessionFactory
{
Configuration config = new Configuration();
config.configure("hibernate.cfg.xml");
sessionFactory = config.buildSessionFactory();
hibSession = sessionFactory.getCurrentSession();
}
public static SessionFactory getSessionFactory
{
initSessionFactory;
return sessionFactory;
}
public static Session getSession()
{
return hibSession;
}
}
Не могли бы вы сказать, каковы наилучшие методы сохранения (обновления, удаления) объекта в базе данных, чтобы сохранить сохраненный объектне остаться в памяти?