Performance JSP Struts性能/内存提示
我正在开发一个基本的基于Struts的应用程序,该应用程序在内存中会出现严重的峰值。我们有一个监视工具,它会注意到每个用户向JVM堆内存添加3MB的一个请求。有什么建议可以鼓励更早的垃圾收集、释放内存或提高性能吗 该应用程序是一个基本的Struts应用程序,但是JSP报告中有很多行,因此可能会创建很多对象。但这不是你以前没见过的东西Performance JSP Struts性能/内存提示,performance,jsp,jakarta-ee,struts,Performance,Jsp,Jakarta Ee,Struts,我正在开发一个基本的基于Struts的应用程序,该应用程序在内存中会出现严重的峰值。我们有一个监视工具,它会注意到每个用户向JVM堆内存添加3MB的一个请求。有什么建议可以鼓励更早的垃圾收集、释放内存或提高性能吗 该应用程序是一个基本的Struts应用程序,但是JSP报告中有很多行,因此可能会创建很多对象。但这不是你以前没见过的东西 执行一组数据库查询 创建序列化的POJO对象bean。这表示一行 将行添加到数组列表中 调用操作时,将数组列表设置为表单对象 JSP逻辑将遍历ActionForm中
1.表单在会话范围内,可能在数据数组列表中(可能这是个问题)。
2.POJObean包含20个左右的字段,它们是
String
或BigDecimal
数据的混合体
报告可以有300到1200行左右。因此,至少创建了这么多对象。根据您提供的信息,我估计您通常会加载1到2兆字节的数据以获得结果:750行*20个字段*100字节/字段=1.4 Mb。现在考虑数据库和最终标记之间需要的所有临时对象。3MB并不奇怪 我只会担心那些记忆是否泄露了;i、 例如,年轻一代空间的下一次垃圾收集不会收集所有这些对象
在Web应用程序中提交报表时,请考虑从数据库中获取的记录数量。
如果记录数量高,整个记录集占用大量内存,则考虑使用报表分页。
尽可能不要显式调用垃圾收集器。这是因为两个原因:我认为问题在于ActionForm中的arraylist需要分配大量内存空间。我会将查询结果直接写入响应:从resultset中读取行、写入响应、读取下一行、写入等。也许这不是MVC,但对堆来说更好:-) ActionForms适用于CRUD操作,但适用于报告。。。我不这么认为
注意:如果ActionForm具有scope=session,则实例将一直处于活动状态(与巨大的arraylist一起),直到会话过期。如果scope=request,则实例将可用于GC。此外,如果您告诉GC运行,则根本无法保证它会运行。