《Java程序性能优化实战》读书笔记(一)

273 阅读2分钟

第1章 Java性能调优概述

1 性能概述

性能的参考指标

  • 执行时间
  • CPU时间
  • 内存分配
  • 磁盘吞吐量
  • 网络吞吐量
  • 响应时间

木桶原理与性能瓶颈

系统的最终性能取决于系统中性能表现最差的组件。为了提升系统的整体性能,必须对系统中表现最差的组件进行优化。

最有可能成为系统瓶颈的计算资源:

  • 磁盘IO
  • 网络操作
  • CPU
  • 异常
  • 数据库
  • 锁竞争
  • 内存

Amdahl定律

加速比=优化前系统耗时/优化后系统耗时

设加速比未Speedup,串行化程序的比重为F,CPU的数量为N,则有

Speedup1F+1FNSpeedup\leqslant\frac{1}{F+\frac{1-F}{N}}

根据Amdahl定律,使用多核CPU对系统进行优化,优化的效果取决于CPU的数量及系统中串行化程序的比重。CPU数量越多,串行化比重越低,则优化效果越好。仅提高CPU数量而不降低程序的串行化比重,无法提高系统性能。

2 性能调优的层次

设计调优

软件设计和架构对软件整体质量有决定性的影响,设计调优对系统性能的影响是最大的。

进行设计优化时,设计人员必须熟悉常用的软件设计方法、设计模式、基本性能组件和常用的优化思想。

代码调优

软件调优是在软件开发过程中或者软件开发完成后,软件维护过程中进行的对程序代码的改进和优化。需要开发人员熟悉相关语言的API和对算法和数据结构的灵活使用。

JVM调优

在软件开发后期进行,需要对JVM的运行原理和基本内存结构有一定的了解。

数据库调优

操作系统调优

3 基本调优策略和手段

系统性能优化的最主要目的是查找并解决性能瓶颈问题。

优化的一般步骤

首先要有明确的目标,清楚优化的对象和最终目的;其次,通过各种性能监控和统计工具对软件进行测试;若未达到优化目标,则需要查找当前的性能瓶颈。

系统优化的注意事项

软件优化需要在软件功能、正确性和可维护性之间取得平衡,不应该过分地追求软件性能。不要为了调优而调优。