Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF中的@viewScope是否可能导致内存泄漏?_Java_Memory_Jsf 2.2_View Scope - Fatal编程技术网

Java JSF中的@viewScope是否可能导致内存泄漏?

Java JSF中的@viewScope是否可能导致内存泄漏?,java,memory,jsf-2.2,view-scope,Java,Memory,Jsf 2.2,View Scope,我的Web应用程序出现内存问题。我使用visualVM监视Web应用程序 每次,我都会进入一个特定的jsf页面,该页面上的bean用ViewScope注释,堆会增加。使用viewScope,当我离开页面时,应清除所有对象和内存。 即使我关闭了会话,堆也会保持在相同的级别,如果我打开这个jsf页面,堆会再次增加 很明显,应用程序会崩溃。。。 会话是否关闭不好?它是否应该“杀死”所有对象?或者,对象引用是否仍然存在,垃圾收集器是否不执行此任务?视图生命周期管理是特定于JSF实现的。 MyFaces和

我的Web应用程序出现内存问题。我使用visualVM监视Web应用程序

每次,我都会进入一个特定的jsf页面,该页面上的bean用ViewScope注释,堆会增加。使用viewScope,当我离开页面时,应清除所有对象和内存。 即使我关闭了会话,堆也会保持在相同的级别,如果我打开这个jsf页面,堆会再次增加

很明显,应用程序会崩溃。。。
会话是否关闭不好?它是否应该“杀死”所有对象?或者,对象引用是否仍然存在,垃圾收集器是否不执行此任务?

视图生命周期管理是特定于JSF实现的。 MyFaces和Mojarra实现了一个队列——当队列满时,在下一次创建新视图时,一些旧的队列将被删除。如果我没弄错的话,最近用得最少的一个。有关更多详细信息,请参阅

您无法可靠地检测到用户已离开页面。您可以在使用js卸载事件之前先侦听窗口,但它无法完美工作。我知道IceFaces1.8.2就是这么做的

当会话被销毁时,其所有视图也会被销毁

你的期望有一些问题

你说的结束会议是什么意思?即使关闭了所有浏览器窗口,也必须等待会话超时。即使这样也不确定,web容器通常不会承诺立即删除过期的会话。您可以通过服务器日志监视会话破坏—为此,您可能需要调整特定服务器的日志设置或创建HttpSessionListener。 垃圾收集不能保证它会立即删除所有无法访问的对象。通过VisualVM强制执行完整GC几次-通常就足够了。但也不是100%。
您在该页面中有任何数据表吗?是的,由于导航菜单,以50为一组显示3000行。数据表是否已分页?抱歉,是的,这就是我们试图说的datatable用于存储会话中的视图状态,即使在视图范围的托管bean中也是如此。使用Jconsole并检查哪些类使用了更多内存