伙计们,我是新来的,我不是英语。我在使用 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 具有请求范围,而 ApplicationScoped Bean 不会产生错误。我对 CDI 比较陌生,所以我必须在哪里报告错误?