`

Java程序性能调优

阅读更多

  一 基本知识

  1.1 性能是什么

  在性能调优之前,我们首先来了解一下性能是什么?关于性能,我想每个学习过Java的人都能列出几点,甚至可以夸夸其谈。在《Java TM Platform Performance》一书中,定义了如下五个方面来作为评判性能的标准:

  1) 运算的性能——哪一个算法的执行性能最好?

  2) 内存的分配——程序运行时需要耗费多少内存?

  3) 启动的时间——程序启动需要多长时间?这在Web项目中的影响不大,但要注意部分程序需要部署或运行在客户端时的情形(比如applet程序)。

  4) 程序的可伸缩性——在压力负载的情况下,程序的性能如何?

  5) 性能的感知——用户在什么情况下会觉得程序的性能不好?

  以上五个方面,在具体的使用场景可以有选择的去评判。至于这五方面的性能调优,在后续的章节中将会陆续的给以相应的性能调优策略。
 
  1.2 调优的规则

  我们只需要关心对我们程序有影响,可以察觉到的性能问题,而不是每一个类中的每一个方法我们都需要想方设法的提高性能。如果程序的性能没有达到我们所期望的要求,我们才需要考虑如何优化性能。同样的,晦涩的代码虽然提高了程序的性能,但同时可能带给我们的是维护的噩梦。我们需要折中的考虑以上两种情况,使得程序的代码是优美的,并且运行的足够快,达到客户所期望的性能要求。

  优化代码甚至会导致不良的结果,Donald Knuth(一位比较牛比较有影响的人物,具体是谁,我也忘了,谁知道,可以告诉我一下,谢谢!)曾说过,“Premature optimization is the root of all evil”。在开始性能调优前,需要先指出不优化代码的一些理由。

  1) 如果优化的代码已经正常工作,优化后可能会引入新的bug;

  2) 优化代码趋向于使代码更难理解和维护;

  3) 在一个平台上优化的代码,在另一个平台上可能更糟;

  4) 花费很多时间在代码的优化上,提高了很少的性能,却导致了晦涩的代码。 确实,在优化前,我们必须认真的考虑是否值得去优化。

  1.3 调优的步骤

  一般我们提高应用程序的性能划分为以下几个步骤:

  1) 明确应用程序的性能指标,怎样才符合期望的性能需求;

  2) 在目标平台进行测试;

  3) 如果性能已经达到性能指标,Stop;

  4) 查找性能瓶颈;

  5) 修改性能瓶颈;

  6) 返回到第2步。

  二 JDK调优

  2.1 选择合适的JDK版本

  不同版本的JDK,甚至不同厂家的JDK可能都存在着很大的差异,对于性能优化的程度不同。一般来说,尽可能选择最新发布的稳定的JDK版本。最新的稳定的JDK版本相对以前的JDK版本都会做一些bug的修改和性能的优化工作。

  2.2 垃圾收集Java堆的优化

  垃圾收集就是自动释放不再被程序所使用的对象的过程。当一个对象不再被程序所引用时,它所引用的堆空间可以被回收,以便被后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。如果对象不再被使用,但还有被程序所引用,这时是不能被垃圾收集器所回收的,此时就是所谓的“内存泄漏”。监控应用程序是否发生了内存泄漏,有一个非常优秀的监控工具推荐给大家——Quest公司的JProbe工具,使用它来观察程序运行期的内存变化,并可产生内存快照,从而分析并定位内存泄漏的确切位置,可以精确定位到源码内。这个工具的使用我在后续的章节中还会做具体介绍。

  Java堆是指在程序运行时分配给对象生存的空间。通过-mx/-Xmx和-ms/-Xms来设置起始堆的大小和最大堆的大小。根据自己JDK的版本和厂家决定使用-mx和-ms或-Xmx和-Xms。Java堆大小决定了垃圾回收的频度和速度,Java堆越大,垃圾回收的频度越低,速度越慢。同理,Java堆越小,垃圾回收的频度越高,速度越快。要想设置比较理想的参数,还是需要了解一些基础知识的。 Java堆的最大值不能太大,这样会造成系统内存被频繁的交换和分页。所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。而且堆设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性能。以下是一些经常使用的参数设置:

  1) 设置-Xms等于-XmX的值;

  2) 估计内存中存活对象所占的空间的大小,设置-Xms等于此值,-Xmx四倍于此值;

  3) 设置-Xms等于-Xmx的1/2大小;

  4) 设置-Xms介于-Xmx的1/10到1/4之间;
  
  5) 使用默认的设置。

  大家需要根据自己的运行程序的具体使用场景,来确定最适合自己的参数设置。 除了-Xms和-Xmx两个最重要的参数外,还有很多可能会用到的参数,这些参数通常强烈的依赖于垃圾收集的算法,所以可能因为JDK的版本和厂家而有所不同。但这些参数一般在Web开发中用的比较少,我就不做详细介绍了。在实际的应用中注意设置-Xms和-Xmx使其尽可能的优化应用程序就行了。对于性能要求很高的程序,就需要自己再多研究研究Java虚拟机和垃圾收集算法的机制了

分享到:
评论

相关推荐

    Java程序性能调优-视频教程

    学习Java程序性能调优视频教程后,有助于您的专业技术大度上升。解决工作诸多问题,快来吧。

    阿里巴巴Java性能调优实战(2021华山版)

    阿里巴巴Java性能调优实战(2021华山版) 本资源摘要信息来自阿里巴巴Java性能调优实战(2021华山版),旨在帮助Java开发者掌握性能调优的实战经验和技术。 性能调优的重要性 性能调优是软件开发中一个非常重要的...

    阿里巴巴Java性能调优实战(2021华山版).pdf

    阿里巴巴Java性能调优实战

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    阿里巴巴Java性能调优华山版是一套系统性能调优教程,!通过这份笔记的学习,你将会有一个系统的调优头脑和策略!快了何止100%?需要的朋友可下载试试! 众所周知性能调优可以使系统稳定,用户体验更佳,甚至在...

    Java性能调优命令

    2. jinfo命令可以观察运行中的Java程序的运行环境参数。此命令非常有用,当需要查看某个Java进程的系统属性或JVM参数时,可以使用`jinfo pid`(pid是进程ID)来列出特定Java进程的详细配置。 3. jstack命令用于产生...

    Java 性能调优 Java 性能调优 Java 性能调优

    ### Java性能调优概述 #### 一、性能优化的重要性与基本概念 在现代软件开发中,性能优化是一项至关重要的任务。对于Java开发者来说,优化不仅仅意味着让程序运行更快,还包括了减少内存消耗、提高响应速度等多个...

    Java性能调优大全

    Java性能调优是一个复杂而重要的领域,涉及到程序的运行效率、资源消耗以及系统的稳定性。这份“Java性能调优大全”提供了全面的指南,包括VisualVM的使用、JVM的性能优化、OMM(可能是指Oracle Management Monitor...

    Java应用程序性能调优

    java应用程序性能调优,性能瓶颈在哪里 增加带宽 减少网页的http请求 加快服务器脚本计算速度 使用动态内容缓存 使用数据缓存 将动态内容静态化 更换Web服务器组件 页面组件分离 合理部署服务器 使用负载均衡 优化...

    Java性能调优PPT

    ### Java性能调优知识点概述 #### 一、高性能Java代码编写原则 - **算法与数据结构**:选择合适的数据结构可以极大地提升程序运行效率。例如,对于查找操作频繁的场景,哈希表(如`HashMap`)比链表或数组更高效。...

    阿里巴巴Java性能调优实战(2021华山版).rar

    《阿里巴巴Java性能调优实战(2021华山版)》是一本专注于Java应用程序性能优化的专业书籍,由阿里巴巴的技术专家团队倾力打造。这本书基于阿里巴巴的实际业务场景,结合丰富的实践经验,为Java开发者提供了深入、...

    Java性能调优指南.pptx

    在Java开发中,性能调优是一项关键任务,它涉及到程序运行效率、资源利用和系统稳定性。本指南主要关注Java虚拟机(JVM)调优、编码最佳实践以及微基准测试的重要性。 **基本规则** 1. **不要轻信,要测试**:...

    Java 工程性能调优教程

    《Java工程性能调优教程》是一门专注于提升Java应用程序效率的综合课程,涵盖了从基础知识到实战演练的多个关键领域。本教程旨在帮助开发者深入理解Java性能优化的各种技术和策略,提高程序运行速度,减少资源消耗,...

    Java ee性能调优.rar

    性能调优是确保这些应用程序高效运行的关键环节。下面将详细介绍Java EE性能调优的相关知识点。 1. **JVM参数调优**: - **内存配置**:调整初始堆大小(`-Xms`)和最大堆大小(`-Xmx`),以适应应用的内存需求,...

    Java GC与性能调优

    Java GC与性能调优 Java GC与性能调优是 Java programming language 中非常重要的一部分,直接影响着 Java application 的性能。本文档将对 Java GC 与性能调优进行详细的介绍。 一、 Java 平台的逻辑结构 Java ...

    Java程序性能优化 让你的Java程序更快、更稳定pdf文档视频资源

    Java程序性能优化是每个开发人员都需要关注的重要领域,特别是在企业级应用中,高效稳定的Java程序能够带来显著的业务优势。本资源包含一个PDF文档和相关的视频教程,旨在帮助你提升Java程序的速度和稳定性。 首先...

    JAVA JVM性能调优监控工具详解

    ### JAVA JVM性能调优监控工具详解 在Java开发过程中,特别是在企业级应用中,经常会遇到各种性能瓶颈问题,如内存溢出(`OutOfMemoryError`)、内存泄露、线程死锁、锁争用等问题。这些问题如果不能及时有效地解决...

    java_性能调优.pdf

    而Servlet是一个Java程序,用来处理客户端的请求并返回响应。对于Web应用的性能调优,合理的服务器配置、优化代码逻辑、减少不必要的数据库操作等都是常见的优化措施。 此外,文档中还提到了数组复制的System....

    JVM系列之性能调优参考手册(实践篇).pdf

    JVM作为Java程序运行的基础环境,对程序性能有着决定性影响。本手册的目的是指导开发者如何对JVM进行性能调优,以达到更高的运行效率和资源利用率。 首先,性能调优并非起点,而是建立在理论基础之上。手册前言部分...

    深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理).zip

    首先,我们要了解Java虚拟机(JVM)是Java程序运行的平台,它负责解释和执行Java字节码,为Java应用程序提供了一个跨平台的运行环境。JVM的核心功能包括类加载、字节码验证、内存管理、垃圾收集等。 在JVM性能调优...

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲慎重使用正则表达式05讲ArrayList还是LinkedList使用不当性能差千倍07讲深入浅出HashMap的设计与优化08讲网络通信优化之IO模型:如何解决高并发下IO瓶颈09...

Global site tag (gtag.js) - Google Analytics