Jsf javax.faces.component.StateHolderSaver未被垃圾收集

Jsf javax.faces.component.StateHolderSaver未被垃圾收集,jsf,garbage-collection,Jsf,Garbage Collection,我是一个中间件人,对JSF有一点经验。我有一个jsf应用程序,我需要检查它在负载和压力下的行为。我用加特林来检查它的行为。几天过去了,我做了很多测试。我已经研究过一种常见的行为 在我启动应用程序并运行两个压力测试之后,应用程序进入了疯狂的垃圾收集周期,但是gc周期并没有成功结束。我检查了采样器,发现了一个对象实例 javax.faces.component.StateHolderSaver实例在压力测试期间不断增加,而不是垃圾收集。在一些测试运行之后,应用程序进入完整的gc周期,因为堆超过了上限

我是一个中间件人,对JSF有一点经验。我有一个jsf应用程序,我需要检查它在负载和压力下的行为。我用加特林来检查它的行为。几天过去了,我做了很多测试。我已经研究过一种常见的行为

在我启动应用程序并运行两个压力测试之后,应用程序进入了疯狂的垃圾收集周期,但是gc周期并没有成功结束。我检查了采样器,发现了一个对象实例

javax.faces.component.StateHolderSaver实例在压力测试期间不断增加,而不是垃圾收集。在一些测试运行之后,应用程序进入完整的gc周期,因为堆超过了上限,cpu罢工发生,这使得应用程序没有响应

你对这个物体有经验吗?为什么这个对象实例没有被销毁?

它是一个与JSF组件的状态保存机制有关的组件,这意味着您可以预期每个页面上的每个组件都有一个。如果你有一个重组件的页面,你会有很多这样的对象。您应该考虑将一些组件标记为临时的,如果您希望在添加到我的应力场景后减轻负载,则实例号开始波动。堆没有扩展到完全gc限制之外,并且繁重的gc cpu周期已经消失。我们所有的托管bean都是视图范围的,我想当会话失效时,这些对象会成功地标记为gc。这有意义吗?是的,这是意料之中的:viewscoped bean链接到活动会话,因此理论上,每当会话过期时,viewscoped bean都应该符合gc的条件。我之所以这样说是因为(取决于您的实现和JSF版本),bean的行为并不总是如预期的那样(请参阅)。但你所经历的是有用的信息。当做