成为Java GC专家(5)—Java性能调优原则

这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程、GC的工作原理、新生代(Young Generation)和老年代(Old Generation)的概念。你应该了解了JDK7中5种GC类型以及各种类型对应用程序的影响。

在第二篇如何监控Java的垃圾回收中,阐述了JVM是怎样实际执行垃圾回收的,我们怎样去监控GC以及哪些工具能让这个过程更高效。

第三篇如何如何优化Java垃圾回收机制中展示了一些基于真实案例的最佳实践。同时讲解了怎样尽量少地将对象放入老年代空间(Old Area),避免频繁地执行完全垃圾回收(Full GC)。还说明了如何设置GC的类型和内存大小。

在第四篇Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响中,解释了MaxClients参数的重要性以及它在垃圾回收过程中对整个系统性能的显著影响。

第五篇文章将讲解Java程序性能调优的原则,尤其是在这个过程中必要的知识以及判断你的程序是否需要调优。还会介绍调优过程中你可能遇到的问题。本文最后会给出一些建议,依据这些你能在对Java程序调优时做出更好的决策。

概述

并不是每个程序都需要调优。如果一个程序性能表现和预期一样,你不必付出额外的精力去提高它的性能。然而,在程序调试完成之后,很难马上就满足它的 性能需求,于是就有了调优这项工作。无论哪种编程语言,对应用程序进行调优都需要丰富的技术知识并且注意力高度集中。另外,你也不应该用相同的方式对两个 程序调优,因为每个程序都有它自己独特的运作方式和不同的资源使用方式。正因如此,调优比写程序需要更多基础知识。例如,你需要熟悉虚拟机、操作系统和计 算机架构。而当你面对在这些知识基础上编写的程序时,就能成功地对它进行调优。

有时调优Java程序只需要修改JVM参数,比如GC的参数。但也有些时候需要修改程序代码。无论那种方法,你首先都需要监控执行Java程序的进程。因此本文会讲解下面几个问题:

  • 怎样监控Java程序?

  • 应该给JVM设置怎样的参数?

  • 如何确定是否需要修改代码?

对Java程序进行调优的必要知识

Java程序在Java虚拟机中运行。因此为了进行调优,你需要理解JVM的工作流程。我之前有一篇博文Understanding JVM Internals,将让你对JVM有深入的了解。

本文中有关JVM运作过程的知识主要关于GC和Hotspot。尽管只有这两方面的知识可能无法对所有的Java程序进行调优,但是这两个因素在大多数情况下都影响着Java程序的性能。

值得注意的是,从操作系统的角度来看,JVM也是一个应用程序进程。为了给JVM创造良好的运行环境,你还需要对操作系统分配资源的过程有所了解。这意味着,想要调优Java程序,除了JVM你也应该理解操作系统或者硬件的工作方式。

需要具有的知识还有Java这门语言本身。另外理解锁和并发、类加载和对象创建都是非常重要的。

当开始调优Java程序时,你应该整合以上各方面的知识来完成工作。

Java程序性能调优的过程

图1是一张Java程序性能调优的流程图,摘自由Charlie Hunt和Binu John所著的Java Performance

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。