Java application 性能分析分享

性能分析的主要方式

  • 监视:监视是一种用来查看应用程序运行时行为的通常方法。一般会有多个视图(View)分别实时地显示 CPU 使用状况、内存使用状况、线程状态以及其余一些有用的信息,以便用户能很快地发现问题的关键所在。
  • 转储:性能分析工具从内存中得到当前状态数据并存储到文件用于静态的性能分析。Java 程序是经过在启动 Java 程序时添加适当的条件参数来触发转储操做的。它包括如下三种:
    • 系统转储:JVM 生成的本地系统的转储,又称做核心转储。通常的,系统转储数据量大,须要平台相关的工具去分析,如 Windows 上的 windbg 和 Linux 上的 gdb。
    • Java 转储:JVM 内部生成的格式化后的数据,包括线程信息,类的加载信息以及堆的统计数据。一般也用于检测死锁。
    • 堆转储:JVM 将全部对象的堆内容存储到文件。
  • 快照:应用程序启动后,性能分析工具开始收集各类运行时数据,其中一些数据直接显示在监视视图中,而另外大部分数据被保存在内部,直到用户要求获取快照,基于这些保存的数据的统计信息才被显示出来。快照包含了应用程序在一段时间内的执行信息,一般有 CPU 快照和内存快照两种类型。
    • CPU 快照:主要包含了应用程序中函数的调用关系及运行时间,这些信息一般能够在 CPU 快照视图中进行查看。
    • 内存快照:主要包含了内存的分配和使用状况、载入的全部类、存在的对象信息及对象间的引用关系等。这些信息一般能够在内存快照视图中进行查看。
  • 性能分析:性能分析是经过收集程序运行时的执行数据来帮助开发人员定位程序须要被优化的部分,从而提升程序的运行速度或是内存使用效率,主要有如下三个方面:
    • CPU 性能分析:CPU 性能分析的主要目的是统计函数的调用状况及执行时间,或者更简单的状况就是统计应用程序的 CPU 使用状况。一般有 CPU 监视和 CPU 快照两种方式来显示 CPU 性能分析结果。
    • 内存性能分析:内存性能分析的主要目的是经过统计内存使用状况检测可能存在的内存泄露问题及肯定优化内存使用的方向。一般有内存监视和内存快照两种方式来显示内存性能分析结果。
    • 线程性能分析:线程性能分析主要用于在多线程应用程序中肯定内存的问题所在。通常包括线程的状态变化状况,死锁状况和某个线程在线程生命期内状态的分布状况等

工具:Java Visual VM多线程

JProfiler函数

相关文章
相关标签/搜索