反馈已提交

网络繁忙

FineReport 内存机制

  • 文档创建者:文档助手1
  • 历史版本:9
  • 最近更新:ooshanghai 于 2020-01-15
  • 1. 描述

    在使用报表的过程中有时候会遇到内存溢出的问题,下面简单介绍我们报表的内存机制以及怎样释放内存。

    2. 内存机制

    2.1 Java 内存回收机制

    Java 的内存垃圾回收(GC)机制是从程序的主要运行对象开始检查引用链,当遍历一遍后发现没有被引用的孤立对象就作为垃圾回收。GC 为了能够正确释放对象,必须监控每一个对象的运行状态。包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。

    在 Java 中,这些无用的对象都由 GC 负责回收,同时 Java 提供了函数可以访问 GC, 如运行 GC 的函数 System.gc(),但是根据 Java 语言规范定义,该函数不保证 JVM 的垃圾收集器一定会执行。因为不同的 JVM 实现者可能使用不同的算法管理 GC。通常 GC 的线程的优先级别较低。JVM 调用 GC 的策略也有很多种,有的是内存使用到达一定程度时,GC 才开始工作,也有定时执行的,有的是平缓执行 GC,有的是中断式执行 GC。

    导致内存泄漏主要的原因是,先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留内存,消耗内存,因为无法让垃圾回收器 GC 验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为"有效的活动",同时不会被释放。要确定对象所占内存将被回收,我们就要务必确认该对象不再会被使用。

    2.2 FineReport 中内存管理释放机制说明

    FineReport 报表后台采用的是纯 Java 语言编写,因此其内存释放机制与上述保持一致,当客户端与服务器端交互结束(如关闭浏览器页面,打印结束等),服务器端会将之前客户端操作消耗的内存释放掉,即置为可被回收状态,等候 JVM 调用 GC

    3. FineReport 中的手动 GC 方法

    FineReport 在 1G 内存下的临界点应该在 130w 行 *5 列左右,对于某些集成环境来说, 有可能是需要做某些操作后,将FR占用的内存释放掉,FR里面也提供了响应的接口,具体使用方法如下所示:

    在一个模板中添加一个按钮,给按钮加上点击事件,或者直接在 JS 中调用,内容如下:


    $.ajax({
         url : FR.servletURL,
         data : {
              op : 'fr_utils',
             cmd : 'gs_gc'
              },
         async : false,
    })

    关键字:GC


    附件列表


    主题: 性能优化
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持