jprofiler查看webapp内存遇到的怪异现象

用jprofiler查看我的web项目
看到这样一幅图,此图是在应用刚刚启动时截取的
让人不解的是:为什么刚启动完spring中居然有10多个实例
看前几行:
SiteDynamicManager$$EnhancerByCGlib 23
SiteDynamicManager$$FastClassByCGlib 19
....

[url]http://xuliangyong.iteye.com/upload/attachment/130623/bff9e8ed-9539-30d4-aaee-593de817fdd3.png[/url]

而其他的Dao对象则正常 只存在一个实例

难道是使用@Transctional的原因?

再来一张
这张图也十分的有趣,都是MessageManager类衍生出来的
MessageManager的代码见附录1
spring中配置也只有一行
<bean id="messageManager" class="com.justel.sns.service.MessageManager" />

[url]http://xuliangyong.iteye.com/upload/attachment/130637/a6fd217b-96a9-3f25-8c0e-df91b99129ff.png[/url]


[b]附录[/b]
public class MessageManager {
private MessageDao messageDao;
private UserDao userDao;

@Transactional
public void send(Message msg) throws UserNotExistException{
User receiver = userDao.findByNickname(msg.getReceiverName());
if(receiver == null&&msg.getReceiver()!=null){
receiver = userDao.get(msg.getReceiver().getId());
}
if(receiver == null){
throw new UserNotExistException();
}
msg.setReceiver(receiver);
messageDao.save(msg);
}

@Transactional
public void save(Message msg){
this.messageDao.save(msg);
}

/**
* 发件箱
*/
@Transactional(readOnly=true)
public Iterator<Message> findSentMessage(Integer id, int maxResults){
return messageDao.findSentMessage(id, maxResults);
}

/**
* 发件箱,分页显示
*/
@Transactional(readOnly=true)
public Page<Message> findSentMessage(int pageNo, int pageSize){
return messageDao.findSentMessage(pageNo, pageSize);
}

/**
* 收件箱
*/
@Transactional(readOnly=true)
public Page<Message> inbox(int pageNo, int pageSize){
return messageDao.findReceivedMessage(pageNo, pageSize);
}

/**
* 查看邮件。收件人
* @param id
* @return
*/
@Transactional
public Message view(Integer id){
Message message = messageDao.load(id);
boolean isViewMyself = SecurityContextHolder.getId().equals(message.getSender().getId()); //自己查看自己的邮件
boolean isSendToMyself = message.getReceiver().getId() == message.getSender().getId(); //自己发给自己的邮件
if(isSendToMyself || !isViewMyself ){
if( !message.isRead() ){
message.setRead(true);
save(message);
}
}
return message;
}

/**
* 删除收件箱邮件
* @param id
*/
@Transactional
public void inboxDelete(Integer id){
Message msg = messageDao.get(id);
if(msg.getReceiver().getId().intValue() == SecurityContextHolder.getId().intValue()){
msg.setReceiverDelete(true);
messageDao.save(msg);
}
}

/**
* 批量删除收件箱邮件
*/
@Transactional
public void inboxBatchDel(List<Integer> listId){
for(Integer id:listId){
Message msg = messageDao.get(id);
if(msg.getReceiver().getId().intValue() == SecurityContextHolder.getId().intValue()){
msg.setReceiverDelete(true) ;
messageDao.save(msg);
}
}
}

/**
* 删除发件箱邮件
* @param id 邮件id
*/
@Transactional
public void outboxDelete(Integer id){
Message msg = messageDao.get(id);
if(msg.getSender().getId().intValue() == SecurityContextHolder.getId().intValue()){
msg.setSenderDelete(true);
messageDao.save(msg);
}
}

/**
* 批量删除发件箱邮件
*/
@Transactional
public void outboxBatchDel(List<Integer> listId){
for(Integer id:listId){
Message msg = messageDao.get(id);
if(msg.getSender().getId().intValue() == SecurityContextHolder.getId().intValue()){
msg.setSenderDelete(true);
messageDao.save(msg);
}
}
}

/**
* 获取未读邮件数
*/
@Transactional(readOnly=true)
public long countUnreadMessage(Integer userId){
return messageDao.findUnreadMessage(userId);
}

public Message get(Integer id){
return messageDao.get(id);
}

public void setMessageDao(MessageDao messageDao) {
this.messageDao = messageDao;
}

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值