不正确使用 JSTL 导致的 内存泄漏

我负责的一个网站

最近出现内存泄漏问题(已经确认,肯定是内存泄漏)

我用jprofiler5监控内存使用 结果

 

貌似是jstl没有被垃圾回收(截图时已经手动回收过了)

有20个对象不能回收

(这个页面的其他对象被回收了)

各位大大 给看看吧 所有分奉上

 

jsp页面相关代码(使用jstl)

<c:set var="f" value="false" />
      <c:forEach var="s" items="${list}">
        <c:if test="${f}">
          <div class="search_1">
            <div class="search_3">
              <div class="search_img"> <a target="_blank" href="/<c:out value='${s.id}'/>.html">
                <c:if test="${not empty s.pic1}"> <img src="/upload/<c:out value='${s.subsiteId}'/>/<c:out value='${s.pic1}' />" alt="" width="162" height="125" border="0" /></c:if>
                <c:if test="${empty s.pic1}"> <img src="/images/cl_xt.gif" width="162" height="125" border="0" /></c:if>
                </a></div>
              <div class="searchwzmain">
                <div class="search_wz"><a target="_blank" href="/<c:out value='${s.id}'/>.html" class="ch06">
                  <c:out value="${s.name}" />
                  </a></div>
                <div class="search_wzjj" style="overflow:hidden;">商户简介:
                  <c:out value="${s.shortDescption}" />
                  ...[<a  target="_blank" href="/<c:out value='${s.id}'/>.html">详细信息</a>] </div>
                <div class="search_wz2" style="overflow:hidden;">详细地址:
                  <c:out value="${s.address}" />
                </div>
                <div class="search_wz3">预订热线:
                  <c:out value="${s.telPhone}" escapeXml="false"/>
                </div>
              </div>
              <div class="searchwzmainright">
                <div class="zkwz">折扣:
                  <c:out value="${s.shortZk}" />
                </div>
                <!--<div class="yhqbtn">
                                <img src="newtu/yhq_btn.gif" width="120" height="30" />
                              </div>-->
                <div class="yhqbtn">
                  <c:if test="${'VIP会员商铺' eq s.payed.name || s.payed.name eq '普通会员商铺' }"> <a target="_blank" href="order.do?category=<c:out value='${param.category}'/>&slcid=<c:out value='${param.slcid}'/>&sid=<c:out value='${s.id}'/>"> <img src="newtu/yud_1.gif" border="0" /> </a> </c:if>
                  <c:if test="${s.payed.name eq '非会员商铺' }"> <img src="newtu/yud_2.gif" border="0" /> </c:if>
                </div>
              </div>
            </div>
          </div>
        </c:if>
        <c:if test="${not f}">
          <div class="search_2">
            <div class="search_3">
              <div class="search_img"> <a target="_blank" href="/<c:out value='${s.id}'/>.html">
                <c:if test="${not empty s.pic1}"> <img src="/upload/<c:out value='${s.subsiteId}'/>/<c:out value='${s.pic1}' />" alt="" width="162" height="125" border="0" /> </c:if>
                <c:if test="${empty s.pic1}"> <img src="/images/cl_xt.gif" width="162" height="125" border="0" /> </c:if>
                </a></div>
              <div class="searchwzmain">
                <div class="search_wz"><a target="_blank" href="/<c:out value='${s.id}'/>.html" class="ch06">
                  <c:out value="${s.name}" />
                  </a></div>
                <div class="search_wzjj" style="overflow:hidden;">商户简介:
                  <c:out value="${s.shortDescption}" />
                  ...[<a  target="_blank" href="/<c:out value='${s.id}'/>.html">详细信息</a>] </div>
                <div class="search_wz2" style="overflow:hidden;">详细地址:
                  <c:out value="${s.address}" />
                </div>
                <div class="search_wz3">预订热线:
                  <c:out value="${s.telPhone}" escapeXml="false"/>
                </div>
              </div>
              <div class="searchwzmainright">
                <div class="zkwz">折扣:
                  <c:out value="${s.shortZk}" />
                </div>
                <!--<div class="yhqbtn">
                                <img src="newtu/yhq_btn.gif" width="120" height="30" />
                              </div>-->
                <div class="yhqbtn">
                  <c:if test="${'VIP会员商铺' eq s.payed.name || s.payed.name eq '普通会员商铺' }"> <a target="_blank" href="order.do?category=<c:out value='${param.category}'/>&slcid=<c:out value='${param.slcid}'/>&sid=<c:out value='${s.id}'/>"> <img src="newtu/yud_1.gif" border="0" /> </a> </c:if>
                  <c:if test="${s.payed.name eq '非会员商铺' }"> <img src="newtu/yud_2.gif" border="0" /> </c:if>
                </div>
              </div>
            </div>
          </div>
        </c:if>
        <c:set var="f" value="${not f}" />
      </c:forEach>

 


问题补充:
christ_1的回答是正解
我在jsp头声明了这几个变量
对象就可以被回收了
附:
这个程序是别人写的
巨恶心 我负责修改
在这里谢谢三位了
内存溢出的可能有资源未释放,将不为空的对象直接指向新创建的对象,我想的话,问题可能在于Java代码 
<c:set var="f" value="${not f}" />

内存溢出的可能有资源未释放,将不为空的对象直接指向新创建的对象,我想的话,问题可能在于[code="java"][/code],其实奇偶判断可以采用forEach的内置变量,如:[code="java"]
/c:if
/c:forEach
[/code]来处理。

s.pic1 是啥?

你这个代码实在是看不清楚到底是什么呢。

建议你的调试方式。
先把那些都去掉。留个foreach,看看释放不,释放了。加一点代码,再测试,直到发现溢出,然后对代码进行修改。

能看看你的Java处理代码么?

我感觉不是你的JSTL泄漏了,很可能是处理的Java代码Action存在泄漏了.

JSTL没到这么高级吧? 能让内存泄漏,呵呵?