文档介绍:: .
的情形(比如 Applet 程序。
4 程序的可伸缩性——在压力负载的情况下,程序的性能如何?
5 性能的感知——用户在什么情况下会觉得程序的性能不好?
以上五个方面,在具体的使用场景可以有选择的去评判。关于如何提高系统性
能的问题,我们在下节进行讨论。
要提高软件的性能,我们可以从以下几个方面着手,
使用高性能、速度快的硬件-- $$$ = 速度
使用恰当的编程语言和进行编译器优化
设计可扩展的应用程序架构设计方面
选择正确的数据结构和算法
代码调整
避免使用较慢的 OS APIs
调整、测量(注意是测量而不是测试、再调整、再测量…
(1 从上面的几个方法来看,使用高性能、速度快的硬件很容易理解,也是决大多
数人在碰到性能问题的时候首先会想到的办法。采取这样的方法总是很有效的吗?
(2 使用恰当的编程语言和进行编译器优化也是提高软件性能的方式之一。例
如在使用 Intel C++编译器时,编译器选项可以组合。每种优化各有其特点,尝试着各
种优化选项的效果,有时各种优化选项组合使用可能效果更好。使用时,这些选项加
到 Project Setting 对话框中。如图 1 所示。图 1
同样,在原则 Java 语言构建软件系统时,可以针对 JDK 进行调优。例如: 选择合
适的 JDK 版本:不同版本的 JDK,甚至不同厂家的 JDK 可能都存在着很大的差异,对
于性能优化的程度不同。一般来说,尽可能选择最新发布的稳定的 JDK 版本。最新
的稳定的 JDK 版本相对以前的 JDK 版本都会做一些 bug 的修改和性能的优化工
作。
垃圾收集:垃圾收集就是自动释放不再被程序所使用的对象的过程。当一个对
象不再被程序所引用时,它所引用的堆空间可以被回收,以便被后续的新对象所使
用。垃圾收集器必须能够断定哪些对象是不再被引用的,并且能够把它们所占据的
堆空间释放出来。如果对象不再被使用,但还有被程序所引用,这时是不能被垃圾收
集器所回收的,此时就是所谓的“内存泄漏”。监控应用程序是否发生了内存泄漏,有
一个非常优秀的监控工具推荐给大家——Quest 公司的 JProbe 工具(这样的工具非
常多,有许多是开源的,使用它来观察程序运行期的内存变化,并可产生内存快照,从而
分析并定位内存泄漏的确切位置,可以精确定位到源码内。这个工具的使用我在后
续的章节中还会做具体介绍。
Java 堆的优化:Java 堆是指在程序运行时分配给对象生存的空间。通过
-mx/-Xmx 和-ms/-Xms 来设置起始堆的大小和最大堆的大小。根据自己
JDK 的版本和厂家决定使用-mx 和-ms 或-Xmx 和-Xms。Java 堆大小决
定了垃圾回收的频度和速度,Java 堆越大,垃圾回收的频度越低,速度
越慢。同理,Java 堆越小,垃圾回收的频度越高,速度越快。要想设置
比较理想的参数,还是需要了解一些基础知识的。Java 堆的最大值不
能太大,这样会造成系统内存被频繁的交换和分页。所以最大内存必须
低于物理内存减去其他应用程序和进程需要的内存。而且堆设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性
能。
在效率方面,程序的效率与详细设计阶段确定的算法的效率直接有关。在详细
设计翻译转换成源程序代码后,算法效率反映为程序的执行速度和存储容量的要
求。要从计算复杂性、内存的使用、数据依赖性等多方了解,使用如何实现算法指
导起一个重要作用。
而数据的依赖性与指令的选择密切相关,以 Intel86x 指令结构为例:
选择指令
需要实现一种算法的指令可能对性能有一