메모리 오류가 발생하여 JVM 인수를 설정하여 JSF 응용 프로그램 메모리 consuption을 조정하려고합니다. ,java.lang.OutOfMemoryError : Java 힙 공간 - 메모리를 절약하는 방법?
-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
모든 것이 잘 작동하는 것 같다 :
JVM 인수 ...
나는 메모리 힙을 증가시키고 하루에 두 번 서버를 다시 시작할 수 있어요,하지만 해결책이 아니다 테네시 공간은 0MB이지만 에덴 공간은 연속적으로 지워지지 만 생존 공간은 여전히 커지고 한계에 도달하면 객체는 테넌트 공간으로 옮겨지며 결코 해제되지 않습니다. 그리고 응용 프로그램을 실행하는 반나절 후 나는 메모리 부족 오류가 발생합니다. 그래서 Tomcat 서버의 자동 재시작을 예약해야합니다. 메모리의 소비가 (하루 데이터베이스에 수천의 움직임에 대해) 같은 작은 APPL 너무 높기 때문에
그래서 난 내 응용 프로그램에서 일부 문제가있을 수 있어야합니다 생각합니다.
Bean.java
/* save datalist */
public void save()
{
session = DaoSF.getSessionFactory.openSession();
try
{
Dao.save(dataList);
}
catch (Exception e) {...}
finally
{
session.close();
}
}
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
01 Dao.java :내 코드의 일부가
저장된 개체가 메모리에 남아 있지 않도록 개체를 데이터베이스에 저장 (업데이트, 삭제)하는 것이 가장 좋은 방법은 무엇입니까?
는 어디 세션 객체를 저장할 수 있습니까? 오라클 세션입니까? 특히 DAO에서는 메서드가 정적 인 관계로? – home
BTW : 세션이 DAO 안에 캡슐화되어야한다고 생각합니다. – home
잘 모르겠지만 메모리 누수가 발생하기 때문에 정적 인 것들을 피하는 것이 항상 좋은 습관이라고 들었습니다 –