我最近安装了XRebel插件,它允许您查看当前会话大小。
我发现,会话在第一个页面加载时立即达到10 mb (初始化auth会话bean)。
对我的设置:
我使用的是JSF2.2、Spring 4和Hibernate 4。
DAO层>服务层>托管Bean
DAO层
@Named
@Singleton
@Repository
public class UserDao extends BaseDao<User>
{
...
}服务层
@Service
@Named
@Singleton
public class UserService extends BaseService<User>
{
@Autowired
private UserDao dao;
...
}我的第四会话bean,它将在第一页加载时加载。
@Named
@Component
@Scope("session")
public class Auth implements Serializable
{
@Autowired
private UserService userService;
...
}在我的applicationContext.xml中
<context:component-scan base-package="com.mypackage" />当我在会话bean中自动访问服务bean时,这是一个普遍的问题。
Userservice只包含用于撤回、保存和删除用户对象的方法,没有包含用户或其他任何内容的ArrayList。
我在我的auth bean中有两条@Autowired服务-- UserService和SessionService。
如果我推荐UserService,SessionService将达到相同的大小。如果我把这两个词都注释掉,"org.springframework.web.context.request.ServletRequestAttribute...“就会有一个"DestructionCallbackBindingListener”立即达到8mb。
我做错了什么?如何减少会话大小?
我很乐意接受任何帮助。
下面是XRebel的图片,显示userService在会话中的大小约为8mb。http://i.stack.imgur.com/TBXx3.png
查看XRebel,beanFactory似乎保存在用户会话中。
发布于 2014-08-25 11:22:34
我在官方论坛上发布了关于XRebel的信息。这就是我收到的答案。
实际上,可以通过CGLIB代理从会话中访问beanFactory。我们可能需要改进如何识别共享或不应该被视为会话一部分的对象。 我们试图显示每个会话占用多少内存,但是当然是在会话之间共享的。 通常,我们从会话中筛选出瞬态字段就足够了,但我们将查看CGLIB/Spring代理,看看如何通过一般规则过滤掉它们,或者只需将特定的Spring类添加到忽略列表中即可。
简而言之:在查看会话大小时,可以忽略bean工厂,如果可能的话,也可以选择标记自动设置的服务瞬态。
事实上,你现在可以在精神上忽略它,或者如果有可能的话,那么是的,使这些变量暂时消失。
https://stackoverflow.com/questions/25472444
复制相似问题