Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance JSP Struts性能/内存提示_Performance_Jsp_Jakarta Ee_Struts - Fatal编程技术网

Performance JSP Struts性能/内存提示

Performance JSP Struts性能/内存提示,performance,jsp,jakarta-ee,struts,Performance,Jsp,Jakarta Ee,Struts,我正在开发一个基本的基于Struts的应用程序,该应用程序在内存中会出现严重的峰值。我们有一个监视工具,它会注意到每个用户向JVM堆内存添加3MB的一个请求。有什么建议可以鼓励更早的垃圾收集、释放内存或提高性能吗 该应用程序是一个基本的Struts应用程序,但是JSP报告中有很多行,因此可能会创建很多对象。但这不是你以前没见过的东西 执行一组数据库查询 创建序列化的POJO对象bean。这表示一行 将行添加到数组列表中 调用操作时,将数组列表设置为表单对象 JSP逻辑将遍历ActionForm中

我正在开发一个基本的基于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应用程序中提交报表时,请考虑从数据库中获取的记录数量。

    如果记录数量高,整个记录集占用大量内存,则考虑使用报表分页。

    尽可能不要显式调用垃圾收集器。这是因为两个原因:

  • 垃圾收集是一个代价高昂的过程 当它扫描整个内存时

  • 大多数生产服务器都将 在JVM级别进行调优以避免 显式garabage集合


  • 我认为问题在于ActionForm中的arraylist需要分配大量内存空间。我会将查询结果直接写入响应:从resultset中读取行、写入响应、读取下一行、写入等。也许这不是MVC,但对堆来说更好:-)

    ActionForms适用于CRUD操作,但适用于报告。。。我不这么认为


    注意:如果ActionForm具有scope=session,则实例将一直处于活动状态(与巨大的arraylist一起),直到会话过期。如果scope=request,则实例将可用于GC。

    此外,如果您告诉GC运行,则根本无法保证它会运行。