`
xly_971223
  • 浏览: 1273940 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

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

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

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

难道是使用@Transctional的原因?

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

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


附录
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;
	}
	
}
  • 大小: 21.1 KB
  • 大小: 2.8 KB
1
0
分享到:
评论
1 楼 east_java 2010-11-21  
这什么原因呢

相关推荐

    JProfiler检查内存泄漏

    通过JProfiler,你可以实时监测应用的内存使用、CPU消耗、线程状态,以及查找可能存在的内存泄漏问题。下面将详细介绍JProfiler在检查内存泄漏方面的关键功能。 **内存剖析** 1. **对象统计与尺寸信息**:...

    jProfiler7 java内存分析

    jProfiler7 java内存分析 里面包含jProfiler7安装版本,及key. 顺带有两个文档,一个en,一个cn. 还有几个html入门介绍及使用,包括案例怎么分析内存泄漏的整个分析解决过程。

    JProfiler对应用服务器内存泄漏问题诊断解决方案.docx

    JProfiler对应用服务器内存泄漏问题诊断解决方案 一、概述 本文主要介绍如何使用 JProfiler 对应用服务器内存泄漏问题进行诊断和解决。内存泄漏是指应用服务器中的一种常见问题,表现为内存长期不合理占用,内存...

    jProfiler7 java内存分析 linux版本

    - jProfiler7提供了详细的内存分配和存活周期视图,帮助开发者定位内存占用大的对象和可能导致问题的代码片段。 2. **jProfiler7的核心功能** - **对象分配追踪**:实时监控对象创建过程,找出哪个类或方法导致了...

    jprofiler的使用及联调内存溢出解决方案交流

    jprofiler的使用及联调内存溢出解决方案交流 jprofiler 是一个全功能的 Java 剖析工具,专用于分析 J2SE 和 J2EE 应用程序。它把 CPU、执行绪和内存的剖析组合在一个强大的应用中,提供许多 IDE 整合和应用服务器...

    idea插件JVM内存工具JProfiler11

    通过查看对象分配图表,可以发现哪些类或方法在消耗大量内存,从而定位潜在的问题。 2. **垃圾收集分析**:JProfiler11提供了GC日志分析,可以观察不同垃圾收集器的执行频率和效果,帮助优化垃圾回收策略,减少不必...

    内存泄漏检测工具JProfiler 资料

    1. **实时内存监控**:JProfiler允许用户实时查看应用程序的内存使用情况,包括堆内存、非堆内存和 PermGen(在较旧的JVM版本中)空间。通过观察内存分配和垃圾回收的动态变化,可以初步判断是否存在内存泄漏。 2. ...

    利用JProfiler对应用服务器内存泄漏问题诊断一例.doc

    利用 JProfiler 对应用服务器内存泄漏问题诊断一例 本文主要从应用的角度来解决中间件应用服务器的内存泄露问题,以提高系统的稳定性和性能。文章通过对某个大型项目的案例分析,介绍了如何使用 JProfiler 工具来...

    利用JProfiler对应用服务器内存泄漏问题诊断一例

    ### 利用JProfiler对应用服务器内存泄漏问题诊断一例 #### 项目背景与问题描述 在一个具有超过300个UseCase用例的大型项目中,Web应用服务器出现了频繁宕机的问题。具体表现包括: - 应用服务器内存长期处于高位...

    Jprofiler JVM不可或缺的内存剖析工具

    **JProfiler:JVM内存分析的关键工具** JProfiler是一款强大的Java虚拟机(JVM)性能监控和剖析工具,尤其在内存管理和性能优化方面扮演着不可或缺的角色。它由EJ Technologies公司开发,提供了一套全面的功能,...

    JProfiler内存泄漏查找文档

    **JProfiler内存泄漏查找文档** JProfiler是一款强大的Java性能分析工具,特别在内存泄漏检测方面有着显著的功效。本文档将详细介绍如何使用JProfiler来定位和解决内存泄漏问题,旨在帮助开发者提升应用程序的性能...

    jprofiler java内存监控

    **Java内存监控与JProfiler详解** Java程序在运行过程中,内存管理和性能优化是至关重要的环节。JProfiler是一款强大的Java性能分析工具,它提供了全面的内存监控、线程分析以及CPU性能剖析等功能,帮助开发者深入...

    jProfiler11 java性能分析利器

    总结来说,jProfiler11作为一款Java性能分析工具,以其全面的性能监控、深入的内存分析、直观的线程视图和强大的远程监控能力,成为Java开发者的得力助手。无论是在开发阶段还是在生产环境中,jProfiler11都能有效地...

    JProfiler对应用服务器内存泄漏问题诊断

    JProfiler是一款强大的Java性能分析工具,尤其在诊断内存泄漏方面表现出色。本文将深入探讨如何使用JProfiler来识别和解决应用服务器的内存泄漏问题。 一、了解内存泄漏 内存泄漏是指程序在申请内存后,无法释放已...

    内存泄露与JProfiler

    内存泄露是程序运行过程中,无法释放不再使用的内存空间的现象,这会导致系统资源逐渐耗尽,影响应用程序的性能和稳定性。在Java这样的垃圾回收(GC)环境中,虽然大部分内存管理由虚拟机自动处理,但不当的编程习惯...

    JProfiler

    **JProfiler**是一款强大的Java应用程序性能分析工具,主要用于检测和优化Java应用的内存使用、CPU性能、线程活动、锁竞争、SQL查询性能等问题。它提供了丰富的可视化界面和详细的统计信息,帮助开发者深入理解并...

    jprofiler

    jprofiler

    jprofiler详细使用介绍

    jprofiler 的监控结果可以通过 VM Telemetry Views 标签来查看,显示了程序运行时的对象信息、内存使用情况和线程情况等信息。通过该标签,可以快速地检测到内存泄漏和死锁等问题。 jprofiler 是一款功能强大且使用...

    jprofiler 注册码+安装包

    JProfiler通过其内存探查器模块帮助开发者发现并定位内存泄漏。它可以显示对象的生存周期,追踪引用链,帮助确定哪些对象不再被使用但仍然保留在内存中。此外,JProfiler还提供了实时的内存分配和垃圾收集视图,以便...

Global site tag (gtag.js) - Google Analytics