我最近安装了XRebel插件,该插件可让您查看当前会话的大小。
我发现,该会话在首页加载(身份验证会话bean的初始化)后立即达到10 mb。
对于我的设置:
我正在使用JSF 2.2,Spring 4和Hibernate 4。
DAO层>服务层>托管Bean
DAO Layer
@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。
我的身份验证bean中有两个@Autowired Services -UserService和SessionService。
如果我赞扬UserService,SessionService将达到相同的大小。如果我都注释掉,那么“ org.springframework.web.context.request.ServletRequestAttribute ...”中的“ DestructionCallbackBindingListener”立即达到8mb。
我究竟做错了什么?如何减小会话大小?
我很高兴接受任何帮助。
这是XRebel的图像,显示userService的会话大小约为8mb。http://i.stack.imgur.com/TBXx3.png
查看XRebel,似乎beanFactory已保存在用户会话中。
我在官方论坛上发布了有关XRebel的信息。这是我收到的答案。
实际上,可以通过CGLIB代理从会话访问beanFactory 。我们可能需要改进我们如何识别共享的对象或不应将其视为会话的一部分。
我们试图显示每个会话占用多少内存,但是Spring beanFactory当然通常在会话之间共享。
通常,我们可以从会话中过滤掉瞬态字段这一事实就足够了,但是我们将看看CGLIB / Spring代理,以了解如何通过通用规则将其过滤掉,或者我们可以仅向其中添加特定的Spring类。忽略列表。
简而言之:在查看会话大小时,可以忽略beanfactory,可以选择将自动装配的服务标记为瞬态。
确实,您可以暂时在脑海中忽略它,或者如果可能,那么可以,使变量为瞬态将排除它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句