我为我的网络应用程序使用托管(Struts + hibernate),
托管 java 内存限制:-XX:MaxPermSize=320m。
我的 Web 应用程序的每个用户都可以检索(仅从 DB 读取,不写入)每个 struts 操作的大量 Java bean - 最多 25 MB(MySQL 中的 number_of_records_in_DB * length_of_record_in_bytes)
用户可以同时使用我的 Web 应用程序(检索数据)
如何优化内存消耗?
我需要使用 Hibernate 兑现策略吗?
hibernate.cfg.xml :
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.use_sql_comments">true</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory </property>
<property name="hibernate.current_session_context_class">thread</property>
Hibernate Dao function :
public List<DataBean> listByPeriod(***) {
****
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query query = session.createQuery(hql).setDate(0, date0).setDate(1, date1);
List<DataBean> data = null;
try {
data = (List<DataBean>)query.list();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
}
session.getTransaction().commit();
session.close();
return data;
}
struts action + hibernate example :
String execute() {
***
List<Databean> results = DataManager.listByPeriod(***); // size up to 25MB
for (Iterator<Databean> it = results.iterator(); it.hasNext(); ) {
doSomething();
***
}
***
}