メモリエラーが発生しているため、JVM引数を設定してJSFアプリケーションのメモリ消費量を調整しようとしています。java.lang.OutOfMemoryError:Javaのヒープスペース - メモリの節約方法
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
すべてが正常に動作するよう、テニュア空間は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:私のコードの一部があります
保存されたオブジェクトがメモリに残らないようにオブジェクトをデータベースに保存(更新、削除)する際のベストプラクティスは何ですか?
?これはOracleセッションですか?特にDAOではメソッドが静的であるため? – home
ところで:セッションはDAOの中にカプセル化されるべきだと思う。 – home
わかりませんが、メモリリークが発生するため、静的なものを避けるのは常に良い方法だと聞いています –