J2EE应用性能分析调整.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
J2EE应用性能分析调整

J2EE应用性能调整 目录 性能问题的级别 开发J2EE应用时遇到的性能问题 如何解决性能问题 开发实施中的案例 性能问题的级别 系统级 应用级 JVM级 系统级 系统配置 网络 I/O 磁盘 I/O 数据库 操作系统 应用级 应用程序设计 应用服务器 JVM级 JVM的选择 JVM的参数调整 对症下药 事半功倍 开发J2EE应用时遇到的性能问题 Java本身的特性 程序设计的问题 应用服务器的调整 Java本身的特性 内存泄漏 多线程的使用 内存泄漏 Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。 内存泄漏 在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此程序员不需要考虑这部分的内存泄露 内存泄漏 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。 内存泄漏 通过分析,我们得知,对于C++,程序员需要自己管理边和顶点,而对于Java程序员只需要管理边就可以了(不需要管理顶点的释放)。通过这种方式,Java提高了编程的效率。 内存泄漏 多线程的使用 JVM或者使用操作系统提供的线程包(本地线程)或者使用自身的线程包,并且将若干线程映射到内核线程(瘦线程)。若应用受上下文切换影响较大,则上下文切换的代价可通过瘦线程的使用来降低。同样,若有线程池操作相同的数据,那么将所有线程与一个内核线程绑定,以增强缓存性能。这会使得所有线程趋向于运行在相同的处理器上并从共享数据中收益。 多线程的使用 JVM如何处理同步问题在性能方面起着非常重要的作用。处理锁的最佳方式是避免锁的使用,对于应用开发人员避免不必要的同步方法和代码块是很有益的。在存在不必要同步代码的情况下,JVM能够检测到同步代码的存在并消除锁。 多线程的使用 JVM以不同方式处理竞争锁和非竞争锁,进行优化使非竞争锁操作能较快执行。JVM对下面问题的所做出的选择都能对性能产生影响:如何处理非竞争锁(瘦)和竞争锁(胖),何时将锁从非竞争锁提升到竞争锁,何时将竞争锁缩小为非竞争锁,是否生成竞争锁或者切换到另一任务。 多线程的使用 程序设计的问题 开发人员一般都是在软件开发结束时才会考虑到性能管理问题。通常情况下,只有等到开发工作的尾声才会进行性能方面的调节工作,希望以此来避免在整个开发周期都需要考虑这个问题━━在许多情况下,这个策略也许是成功的。然而,早期的设计决策会对性能调节是否成功以及是否有必要进行性能调节产生影响。如果你开发的软件对性能非常敏感,从设计阶段和开发周期的第一天起就应该考虑到性能管理的问题。 应用服务器的调整 线程池 数据库连接池 如何解决性能问题 数据收集:随着系统的运行,使用压力测试和性能监控工具来收集性能数据 。 瓶颈确认:分析所收集的数据来确认性能瓶颈 。 其它选择方案的确定:确定、分析、选择其它方案以解决瓶颈问题 。 解决方案的应用:应用解决方案 。 测试:评估相应行为的性能效果 。 如何解决性能问题 开发实施中的案例 系统级 应用级 JVM级 系统级 磁盘 I/O 问题 网络I/O问题 数据库调整 应用级 从JDBC到数据库连接池 从String到StringBuffer 使用J2EE最佳应用模式 调整应用服务器的线程池 内存泄漏实例 内存泄漏实例 有问题的代码 public static void main(String[] args) throws Exception { System.out.println(启动); //对象容器 Vector v = new Vector(10); while(true){ for (int i = 1; i 100; i++) { MemoryLeak o = new MemoryLeak(); v.add(o); //内存泄漏 o = null; } //JVM回收内存垃圾 Runtime.getRuntime().g

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档