`

性能调优的基本知识和JDK调优

阅读更多

基本知识

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-XmsJava堆大小决定了垃圾回收的频度和速度,Java堆越大,垃圾回收的频度越低,速度越慢。同理,Java堆越小,垃圾回收的频度越高,速度越快。要想设置比较理想的参数,还是需要了解一些基础知识的。

Java堆的最大值不能太大,这样会造成系统内存被频繁的交换和分页。所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。而且堆设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性能。以下是一些经常使用的参数设置:

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

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

3) 设置-Xms等于-Xmx1/2大小;

4) 设置-Xms介于-Xmx1/101/4之间;

5) 使用默认的设置。

大家需要根据自己的运行程序的具体使用场景,来确定最适合自己的参数设置。

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

分享到:
评论

相关推荐

    java性能调优的基本知识.pdf

    本文主要探讨了Java性能调优的基础知识,包括Java堆的管理和JDK调优策略。 Java堆是Java虚拟机(JVM)中用于存储对象的主要内存区域。它的大小可以通过JVM启动参数`-Xms`和`-Xmx`来设定,分别代表初始堆大小和最大堆...

    java性能调优的基本知识.doc

    Java性能调优的基本知识 Java性能调优是指通过调整Java虚拟机(JVM)和垃圾收集算法的参数来提高Java应用程序的性能。在Java性能调优中,堆大小是一个非常重要的参数,堆大小的设置直接影响着垃圾回收的频度和速度...

    Java性能调优大全

    总的来说,这个“Java性能调优大全”涵盖了从基础的JVM配置到复杂的性能监控和问题诊断,是Java开发者提升应用性能的宝贵资源。通过深入学习和实践这些内容,可以显著提高Java应用程序的效率和稳定性。

    Java性能调优命令

    以下是一些常用的Java性能调优命令及其用法和相关知识点。 1. jps命令用于列出所有的JVM实例。通过该命令,开发者可以快速查看本机上所有Java应用程序的进程ID。例如,使用`jps`可以列出本机所有的JVM实例。 2. ...

    Java性能调优指南.pptx

    Java性能调优是一个涉及多个层面的过程,需要结合理论知识、实践经验以及对JVM和代码的深入理解。通过遵循基本规则,使用正确的工具,编写和运行微基准测试,以及阅读和理解JDK源码,开发者可以有效地提升应用程序的...

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

    ### Java性能调优概述 #### 一、性能优化的重要性与基本概念 在现代软件开发中,性能优化是一项至关重要的任务。对于Java开发者来说,优化...希望读者能够在实践中不断探索,掌握更多关于Java性能调优的知识和技巧。

    JAVA性能调优实战,这篇就够了

    2. Java编程性能调优:讲解JDK工具类的使用,基础数据类型和容器的优化,以及网络通信调优。 3. 多线程性能调优:讨论多核处理器环境下的多线程优化,包括同步锁和高并发性能问题。 4. JVM性能监测及调优:深入JVM,...

    JVM基础知识及性能调优.pdf

    JVM的性能直接影响Java应用程序的运行效率,因此了解其基础知识和进行性能调优是每位Java开发者和系统架构师的必备技能。 首先,JVM的基本结构包括几个关键组件:类加载子系统负责加载Java类;Java栈存储线程运行时...

    JVM基础知识及性能调优

    ### JVM基础知识及性能调优 #### 一、JVM架构概览 Java虚拟机(JVM)作为Java程序运行的基础环境,其内部结构复杂且高效。理解JVM的基础知识对于优化Java应用程序至关重要。JVM主要由以下几个关键部分组成: 1. **...

    47-Java性能调优实战.zip

    首先,模块一概述部分可能介绍了性能调优的基本概念和重要性,以及Java性能分析的基础知识,包括CPU使用率、内存占用、垃圾回收等。了解这些基础知识有助于开发者建立正确的调优思维。 模块二深入到Java编程性能...

    006-jvm性能调优

    JVM性能调优 JVM(Java Virtual Machine...JVM性能调优需要了解JVM基础知识、JVM参数调优、堆空间内存分配、垃圾收集等知识点,并结合实际应用中的需求和限制,选择合适的JVM参数配置和垃圾收集算法,以提高JVM性能。

    JAVA性能测试与调优案例

    在数据库性能调优方面,文档提及了多种监控和诊断Oracle数据库性能的方法,包括在LoadRunner的Controller中配置监控Oracle,使用SiteScope、Oracle企业管理器和Spotlight等工具。文档还详细介绍了如何分析V$SYSSTAT...

    通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅.docx

    * Oracle 的安装和配置需要一定的技术基础和经验。 二、Linux 环境下安装 Oracle 的准备 * 选择合适的 Linux 发行版,例如 RedHat、SuSe 等。 * Oracle 10g 的 g 是 grid 的缩写,意为网格,目前较为前沿的网络...

    Oracle WebLogic Server高级性能调优

    接下来,我们将针对给定的文件内容,探讨相关的高级性能调优知识点。 1. 启动和配置WebLogic Server - 启动WebLogic Server(WLS)时,需要运行启动脚本,比如在Windows环境下,可通过运行startWebLogic.cmd来启动...

    泛微e-cology常见-问题解决及性能调优

    综上所述,通过对泛微e-cology在实际应用中遇到的各种问题进行针对性地解决,以及采取合理的性能调优措施,可以有效提升系统的稳定性和用户体验。希望上述内容能够帮助到正在使用泛微e-cology的企业和个人,解决实际...

    使用visualvm工具进行tomcat性能调优和性能监控.docx

    使用 VisualVM 工具进行 Tomcat 性能调优和性能监控 本文主要介绍了如何使用 VisualVM 工具来进行 Tomcat 的性能调优和性能监控。下面将详细介绍相关知识点: 一、JDK 内存优化 在 Tomcat 中,默认的堆大小为 128...

    java_性能调优.pdf

    在《java_性能调优.pdf》这份文档中,我们可以提取出一系列关于Java性能调优的知识点,包括但不限于Java语言基础、集合框架、异常处理、设计模式、JDBC使用、I/O操作、多线程编程、JVM内存管理、JSP和Servlet等。...

    JVM性能调优经典教程

    Java虚拟机(JVM)是Java程序运行的基础,它的性能直接影响到Java应用的效率和稳定性。JVM性能调优是一项关键技术,旨在优化JVM的内存管理、垃圾收集、类加载等方面,以提升程序运行速度、减少内存占用并避免系统...

Global site tag (gtag.js) - Google Analytics