- 浏览: 1273940 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
最后的攻城狮:
这也太乱了
mybatis与spring事物处理日志 -
leo_soul:
现在不能跨1级域名了吧?比如www.aaa.com,www.b ...
Cookie跨域操作 -
zy976133:
怎么解决的
jaxws不支持SOAPBinding.Use.ENCODED -
cuiyaoqiang:
你好 开发一个http接口给fs调用 ,这个http接口是自己 ...
freeswitch 动态加载号码 -
Jackromer:
请问楼主知道如何通过主控方来删除与其有关的中间表记录? 谢谢, ...
hibernate 多对多只删除中间表数据
用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中配置也只有一行
http://xuliangyong.iteye.com/upload/attachment/130637/a6fd217b-96a9-3f25-8c0e-df91b99129ff.png
附录
看到这样一幅图,此图是在应用刚刚启动时截取的
让人不解的是:为什么刚启动完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; } }
发表评论
-
多线程模式之Future Pattern
2013-06-24 17:22 1198Future模式在jdk5中有实现 其特点是:不阻塞等待函数的 ... -
多线程模式之Thread per message
2013-06-20 14:00 1198Thread per Message 意思是每个请求都启动一个 ... -
多线程之读写锁模式 Read-Write Lock Pattern
2013-06-08 16:37 2996场景: 老师在黑板上写了字,很多学生在下面读 现在老师要擦掉 ... -
java Thread只interrupted() interrupt() isInterrupted()
2013-06-07 15:22 3705Thread类有几个与中断有关的方法 Thread.inte ... -
多线程之Producer-Consumer Pattern
2013-06-07 13:24 1967生产者/消费者模式 有两个厨师在做蛋糕(生产者)两个客人在吃蛋 ... -
多线程模式之 Guarded Suspension Pattern
2013-06-04 18:00 1461Guarded Suspension Pattern这个模式翻 ... -
java synchronize 与 lock
2013-05-30 15:55 1200synchronize方法和 synchronized 块都不 ... -
java wait notifyAll方法
2013-05-29 14:02 1451说道java多线程就不能不提synchronize wait ... -
java的抽象方法是如何实现的
2010-11-09 16:39 2086C++编译器如何处理虚函数 C++中的虚函数就是java中的 ... -
JVM内存结构
2010-07-20 15:06 1692把知道的java内存结构简单缕一缕 主要有这个几个 方法区 ... -
不用任何框架开发web service
2010-07-19 17:20 2677很讨厌webservice框架配置的繁琐 尤其是axis系列 ... -
List与数组占用字节数
2010-07-17 19:03 4647想看一下List序列化后占用多少个 字节,测试程序如下: p ... -
java CAS原语
2010-07-10 17:18 7596java 中的synchronized关键字是悲观锁 也叫独占 ... -
理解CountDownLatch
2010-07-10 11:11 2081字面意思是倒计时类 类名其实说的很形象,倒数到0时线程解除阻塞 ... -
xmemcached
2010-07-02 08:47 3577package net.rubyeye.xmemcached. ... -
hibernate search 手动创建索引
2010-06-04 14:55 4210hibernate search默认采用自动创建索引 只要在e ... -
正则表达式中的groupCount与group
2010-03-15 11:58 12794groupCount是用在pattern中有‘()’时使用 如 ... -
eclipse中svn合并
2010-03-12 10:09 5594概述 本文介绍了在eclipse中合并svn项目 主干 分支 ... -
java发送http head请求
2010-02-25 10:58 10895public static void main(String ... -
nio ByteBuffer理解
2010-02-24 10:57 2396ByteBuffer实际上是一块连续的内容 可以理解成一个by ...
相关推荐
通过JProfiler,你可以实时监测应用的内存使用、CPU消耗、线程状态,以及查找可能存在的内存泄漏问题。下面将详细介绍JProfiler在检查内存泄漏方面的关键功能。 **内存剖析** 1. **对象统计与尺寸信息**:...
jProfiler7 java内存分析 里面包含jProfiler7安装版本,及key. 顺带有两个文档,一个en,一个cn. 还有几个html入门介绍及使用,包括案例怎么分析内存泄漏的整个分析解决过程。
JProfiler对应用服务器内存泄漏问题诊断解决方案 一、概述 本文主要介绍如何使用 JProfiler 对应用服务器内存泄漏问题进行诊断和解决。内存泄漏是指应用服务器中的一种常见问题,表现为内存长期不合理占用,内存...
- jProfiler7提供了详细的内存分配和存活周期视图,帮助开发者定位内存占用大的对象和可能导致问题的代码片段。 2. **jProfiler7的核心功能** - **对象分配追踪**:实时监控对象创建过程,找出哪个类或方法导致了...
jprofiler的使用及联调内存溢出解决方案交流 jprofiler 是一个全功能的 Java 剖析工具,专用于分析 J2SE 和 J2EE 应用程序。它把 CPU、执行绪和内存的剖析组合在一个强大的应用中,提供许多 IDE 整合和应用服务器...
通过查看对象分配图表,可以发现哪些类或方法在消耗大量内存,从而定位潜在的问题。 2. **垃圾收集分析**:JProfiler11提供了GC日志分析,可以观察不同垃圾收集器的执行频率和效果,帮助优化垃圾回收策略,减少不必...
1. **实时内存监控**:JProfiler允许用户实时查看应用程序的内存使用情况,包括堆内存、非堆内存和 PermGen(在较旧的JVM版本中)空间。通过观察内存分配和垃圾回收的动态变化,可以初步判断是否存在内存泄漏。 2. ...
利用 JProfiler 对应用服务器内存泄漏问题诊断一例 本文主要从应用的角度来解决中间件应用服务器的内存泄露问题,以提高系统的稳定性和性能。文章通过对某个大型项目的案例分析,介绍了如何使用 JProfiler 工具来...
### 利用JProfiler对应用服务器内存泄漏问题诊断一例 #### 项目背景与问题描述 在一个具有超过300个UseCase用例的大型项目中,Web应用服务器出现了频繁宕机的问题。具体表现包括: - 应用服务器内存长期处于高位...
**JProfiler:JVM内存分析的关键工具** JProfiler是一款强大的Java虚拟机(JVM)性能监控和剖析工具,尤其在内存管理和性能优化方面扮演着不可或缺的角色。它由EJ Technologies公司开发,提供了一套全面的功能,...
**JProfiler内存泄漏查找文档** JProfiler是一款强大的Java性能分析工具,特别在内存泄漏检测方面有着显著的功效。本文档将详细介绍如何使用JProfiler来定位和解决内存泄漏问题,旨在帮助开发者提升应用程序的性能...
**Java内存监控与JProfiler详解** Java程序在运行过程中,内存管理和性能优化是至关重要的环节。JProfiler是一款强大的Java性能分析工具,它提供了全面的内存监控、线程分析以及CPU性能剖析等功能,帮助开发者深入...
总结来说,jProfiler11作为一款Java性能分析工具,以其全面的性能监控、深入的内存分析、直观的线程视图和强大的远程监控能力,成为Java开发者的得力助手。无论是在开发阶段还是在生产环境中,jProfiler11都能有效地...
JProfiler是一款强大的Java性能分析工具,尤其在诊断内存泄漏方面表现出色。本文将深入探讨如何使用JProfiler来识别和解决应用服务器的内存泄漏问题。 一、了解内存泄漏 内存泄漏是指程序在申请内存后,无法释放已...
内存泄露是程序运行过程中,无法释放不再使用的内存空间的现象,这会导致系统资源逐渐耗尽,影响应用程序的性能和稳定性。在Java这样的垃圾回收(GC)环境中,虽然大部分内存管理由虚拟机自动处理,但不当的编程习惯...
**JProfiler**是一款强大的Java应用程序性能分析工具,主要用于检测和优化Java应用的内存使用、CPU性能、线程活动、锁竞争、SQL查询性能等问题。它提供了丰富的可视化界面和详细的统计信息,帮助开发者深入理解并...
jprofiler
jprofiler 的监控结果可以通过 VM Telemetry Views 标签来查看,显示了程序运行时的对象信息、内存使用情况和线程情况等信息。通过该标签,可以快速地检测到内存泄漏和死锁等问题。 jprofiler 是一款功能强大且使用...
JProfiler通过其内存探查器模块帮助开发者发现并定位内存泄漏。它可以显示对象的生存周期,追踪引用链,帮助确定哪些对象不再被使用但仍然保留在内存中。此外,JProfiler还提供了实时的内存分配和垃圾收集视图,以便...