In our  JavaEE6 project (EJB3, JSF2) on JBoss 7.1.1, it seems we have a memory leak with SeamFaces @ViewScoped.
We made a little prototype to check the fact :
- we use JMeter to call a page 200 times;
 - the page contains and calls a viewscoped bean which injects a stateful EJB;
 - we fix the session timeout at 1 minute.
 
At the end of the test, we check the content of the memory with VisualVM, and here what we got:
- with a 
@ViewScopedbean, we still get 200 instances of the statefulMyController- and the@PreDestroymethod is never called; - with a 
@ConversationScopedbean,@preDestroymethod is called a the session end and then we got a clean memory. 
Do we badly use the view scope, or is it truly a bug?
Here's the XHTML page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"   
   xmlns:s="http://jboss.org/seam/faces">
   <f:metadata>
        <f:viewParam name="u" value="#{myBean.uselessParam}" />
        <s:viewAction action="#{myBean.callService}" />
   </f:metadata>
   <h:body >
        <f:view>
        </f:view>
   </h:body>    
</html>
Now the included bean myBean. For the @ConversationScoped variant, all commented parts are uncommented.
@ViewScoped
// @ConversationScoped
@Named
public class MyBean implements Serializable 
{
    @Inject
    MyController myController;
    //@Inject
    //Conversation conversation;
    private String uselessParam;
    public void callService()
    {
        //if(conversation.isTransient())
        //{
        //            conversation.begin();
        //}
        myController.call();
    }
    public String getUselessParam() 
    {
        return uselessParam;
    }
    public void setUselessParam(String uselessParam) 
    {
        this.uselessParam = uselessParam;
    }
}
And then the injected stateful bean MyController:
@Stateful
@LocalBean
public class MyController
{
   public void call()
   {
         System.out.println("call ");
   }
   @PreDestroy
   public void destroy()
   {
         System.out.println("Destroy");
   }
}