setInterval jsf2.0 glassfish v3和内存泄漏

时间:2010-09-19 14:20:20

标签: jsf glassfish-3 setinterval cdi out-of-memory

伙计我是新人,我不是英国人。 我有一个问题,使用js setInterval模拟用户点击,每隔X秒,在提交按钮上。 在页面中只有一个h:form和h:commandButton。 我使用分析器,我看到java.util.HashMap连续增加它的大小。 几个小时后,使用的堆大小在起点上大大增加。

请帮助我,这个问题让我发疯。

这是代码:

<?xml version = "1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <script type="text/javascript">
            var timeoutId = window.setInterval( "userClick()" , 1000 );
        </script>
    </h:head>
    <h:body>
    <h:panelGroup id="testo">test</h:panelGroup>
    <h:form prependId="false" >
        <h:commandButton id="buttonId"
                         action="null"
                         value="Invia">
            <f:ajax event="click" execute="@form" render=":testo"/>
        </h:commandButton>
    </h:form>
    <script type="text/javascript">
    function userClick()
    {
        document.getElementById('buttonId').click();
    }
    </script>
    </h:body>
</html>

更新:1天后应用程序再次崩溃。 现在我只使用了setInterval但是我有glassfish生成的heapDump这是截图但我无法发布它,因为我的声誉太低了。 但java.lang.Object []消耗20%的堆,java.util.HashMap $ Entry [] 18%和HashMap 10% 任何的想法?

更新: 嗨,伙计们,我已经解决了我的问题,并在CDI依赖/注入中发现了一个错误。 我已经解决了使用@ManagedBean更改注释@Named的问题,这解决了我的问题。 在示例中,我省略了代码,因为我认为CDI没有错误。 显然,使用@Named注释的Bean有请求Scoped,而ApplicationScoped Bean不会产生错误。 我对CDI比较新,所以我必须报告错误?

1 个答案:

答案 0 :(得分:0)

  

几个小时后,使用的堆大小在起点上大大增加。

确定。但是垃圾收集(GC)后你会得到什么内存?我建议启用GC日志记录(-Xloggc:file.log),并在此处发布一些结果图表。另外,请确保您使用的是最新版本的GlassFish(3.0.1)。