本文是GC专家系列中的第五篇。在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别。所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC对性能的影响。
在第二篇Java垃圾回收的监控中介绍了在真实场景中JVM是如何运行GC,如何监控GC数据以及有哪些工具可用来方便进行GC监控。
在第三篇GC 调优中基于真实案例介绍了可用于GC调优的最佳选项。同时也描述了如何通过降低移动到老年代中对象的数量来缩短Full GC耗时,以及如何设置GC类型及内存大小。
在第四篇 Apache的MaxClients设置及其对Tomcat Full GC的影响 中介绍了Apache对 MaxClients 选项在系统发生GC时对整体性能的影响。
在本文中我将会介绍Java应用性能优化的一般原则。具体来说,我会介绍性能优化的必要条件、判断是否需要优化的步骤,同时也会列出在性能优化过程中经遇到的一些问题。在文章结尾,我会给你一些在性能优化过程中如何做出最优决定的建议。
概述
不是每个应用都需要优化。如果系统的运行状况正如你的期望,你就没必要花费更多精力在额外的性能提升上。然而,在调试过程中就期望系统能达到它的目标性能往往会比较困难。这时就需要做系统优化的工作了。不管使用哪种语言,性能优化都要有较高的专业技能和高度专注。另外,因为每个应用都有自己独特的操作和不同的资源使用情况,在优化两个不同系统中可能需要使用不同的具体方法。所以与开发应用相比,性能优化更需要有扎实的基础知识,例如需要具有虚拟机、操作系统甚至计算机体系结构的相关知识。基于这些基础,再面对系统进行优化时,成功的机率就会更高。
一些Java应用的优化只需要调整JVM的选项,例如改变垃圾回收类型,不过有时也是需要去调整源码。不管使用哪种方式,你首先都需要去监控Java应用的执行处理过程。基于此,本文主要涵盖的内容如下:
- 如何监控Java应用
- 如何设置JVM选项
- 如何判断是否有必要修改应用代码