// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 使用 NetBeans IDE 中的性能分析点
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 使用 NetBeans IDE 中的性能分析点 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 使用 NetBeans IDE 中的性能分析点

NetBeans IDE 中包含一款功能强大的性能分析工具，可提供与应用程序的运行时行为有关的重要信息。通过 NetBeans 性能分析工具，可以从 IDE 中轻松监视线程状态、CPU 性能以及应用程序的内存使用情况，而且其开销相对较低。

本文档介绍了如何使用性能分析点作为另外一种设置和控制性能分析会话的方法。性能分析点类似于直接放在源代码中的调试器断点，只要遇到就会触发行为。性能分析点一经设置，就会成为项目的一部分，直至将其删除。您可以打开 "Profiling Points"（性能分析点）窗口，以查看、修改和删除项目中的性能分析点。

使用性能分析点，可以执行以下任务：

* 重置性能分析结果
* 生成快照或堆转储
* 记录代码片段的时间戳或执行时间
* 停止和启动负载生成器脚本（需要负载生成器插件）

本文档将介绍如何使用性能分析点获取与 Anagram Game 样例应用程序（包含在 IDE 中的简单 Java 应用程序）有关的性能分析数据。虽然 Anagram Game 是一个非常简单的 Java 应用程序项目，但仍可按照同样的步骤，对更大型、更复杂的 Java 应用程序以及 Web 和企业应用程序项目进行性能分析。

开始学习本教程之前，您可能需要阅读以下文档，以熟悉性能分析工具的用法。

* link:profiler-intro.html[+在 NetBeans IDE 中对 Java 应用程序进行性能分析的简介+]

image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]




== 入门指南


=== 先决条件

本文档假定您具备以下技术的一些基本知识或编程经验：

* Java 编程
* NetBeans IDE


=== 本教程所需要的软件

在学习本教程之前，您需要在计算机上安装以下软件：

|===
|软件或资源 |要求的版本 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2, 7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 7 或 8 
|===

*注：*

* 性能分析工具与 NetBeans IDE 捆绑在一起，无需进行特定的设置，即可开始对应用程序进行性能分析。


== 性能分析点基础知识

作为一般性指南，本部分介绍了如何设置项目中的性能分析点，以及如何查看和修改现有的性能分析点。有不同类型的性能分析点，您可以根据使用情况选择相应的性能分析点。一个项目中可能有各种与之相关的不同性能分析点。根据要在该性能分析会话期间获取的度量数据，可以添加、删除、启用和禁用性能分析点。


=== 设置性能分析点

要设置性能分析点，最简便的方法就是在编辑器窗口中使用源代码。只需在代码中选择要设置性能分析点的行，然后再打开 "New Profiling Point"（新建性能分析点）窗口即可。此外，也可以在为性能分析会话配置选项时设置性能分析点。

1. 打开包含用户要在其中插入性能分析点的代码的文件。
2. 在源代码编辑器中，右键单击要添加性能分析点的行，然后选择 *Profiling*（性能分析）> *Insert Profiling Point*（插入性能分析点），以打开新建性能分析点向导。
3. 选择性能分析点类型和项目。单击 "Next"（下一步）。
image::images/ppoints-newstopwatch.png[title=""New Profiling Point"（新建性能分析点）对话框的屏幕快照"]


. 键入性能分析点的名称并定制其属性。单击 "Finish"（完成）。

单击 "Finish"（完成），此时在源代码编辑器的左旁注中，您会看到插入了性能分析点的行旁边将显示一个表示性能分析点类型的图标。

image::images/ppoints-icons.png[title="源代码编辑器旁注中的性能分析点标注"] 


=== 启用、禁用和编辑性能分析点

如果性能分析会话没有运行，则可以在源代码编辑器或 "Profiling Points"（性能分析点）窗口中，编辑、启用和禁用各个性能分析点。要查看所有性能分析点的列表，请打开 "Profiling Points"（性能分析点）窗口，方法是从主菜单中选择 *Window*（窗口）> *Profiling*（性能分析）> *Profiling Points*（性能分析点）。"Profiling Points"（性能分析点）窗口将显示性能分析点的当前状态。

性能分析会话正在运行时，"Profiling Points"（性能分析点）窗口中会显示遇到每个性能分析点的次数，并允许您查看结果的报告。

image::images/ppoints-window.png[title=""Profiling Points"（性能分析点）窗口的屏幕快照"]

您可以快速导航至源代码中的特定性能分析点，方法是：打开 "Profiling Points"（性能分析点）窗口，右键单击性能分析点名称，然后选择 "Show Source"（显示源）。

要修改性能分析点的设置状态，可执行以下任一操作。

* 在源代码编辑器中，右键单击旁注中的性能分析点图标，然后在弹出式菜单中选择 "Profiling Point"（性能分析点）。
* 在 "Profiling Points"（性能分析点）窗口中，选择一个性能分析点，然后使用工具栏编辑、删除、启用或禁用该性能分析点。

此外，也可以右键单击列表中的性能分析点名称，然后在弹出式菜单中选择一个命令。

如果选择编辑性能分析点，则将打开 "Customize Profiling Point"（定制性能分析点）对话框。

image::images/ppoints-customize.png[title=""Customize Profiling Point"（定制性能分析点）对话框的屏幕快照"] 


=== 查看项目中的活动性能分析点

您可以在分析内存使用情况或应用程序性能时使用性能分析点。选择性能分析任务时，可以看到为性能分析会话激活并启用的性能分析点。

1. 右键单击项目节点，然后选择 "Profile"（性能分析），以打开 "Select Profiling Task"（选择性能分析任务）对话框。
2. 选择性能分析任务（CPU 或内存）。
3. 选择 *Advanced (instrumented)*（高级（分析））。
4. 在设置窗格中单击 *Show active Profiling Points*（显示活动的性能分析点）。

只有在选择了 "Advanced"（高级）性能分析选项时，指向 "show active profiling points"（显示活动的性能分析点）的链接才可用。

image::images/points-active.png[title=""Active Profiling Points"（活动的性能分析点）对话框的屏幕快照"]

单击 "Show active Profiling Points"（显示活动的性能分析点）后，将打开一个对话框，其中列出了在项目中设置的所有性能分析点。已设置但被禁用的性能分析点将灰显。

*注：*如果要启用、禁用或定制性能分析点的设置，请打开 "Profiling Points"（性能分析点）窗口或在项目中找到相应的性能分析点。


== 使用性能分析点

在本部分中，将创建样例项目，然后在源代码中设置不同的性能分析点。本练习将演示如何使用不同的性能分析点。


=== 创建样例项目

在本文档中，将在 Anagram Game 样例应用程序性能分析期间使用性能分析点。为此，首先要使用新建项目向导来创建样例应用程序。

要创建 Anagram Game 应用程序，请执行以下步骤。

1. 从主菜单中选择 "File"（文件）> "New Project"（新建项目）。
2. 在新建项目向导中，选择 "Samples"（样例）> "Java" 类别。
3. 选择 Anagram Game 项目。
4. 指定项目的位置。单击 "Finish"（完成）。

单击 "Finish"（完成），此时 IDE 将创建 Anagram Game 样例项目。



. 从主菜单中选择 "Run"（运行）> "Set Main Project"（设置为主项目）> "AnagramGame"。

在将项目设置为主项目后，您可以看到 Anagram Game 项目的名称在 "Projects"（项目）窗口中显示为粗体。默认情况下，使用 IDE 对项目进行性能分析时，IDE 也将对主项目进行性能分析。如果未将项目设置为主项目，则 IDE 将会对在 "Projects"（项目）窗口中选择的项目进行分析。


=== 度量代码片段的执行时间

您可以使用秒表性能分析点，检索遇到性能分析点的时间戳。此外，您还可以使用秒表性能分析点，度量代码片段的执行时间，方法是计算两个时间戳之间的差值。您可以设置任意数量的秒表性能分析点。

设置秒表性能分析点时，可以选择以下一个类型。

* *时间戳*。此类型检索遇到性能分析点时的时间戳。
* *时间戳和持续时间*。此类型可用于测量执行代码片段所用的时间。您可以指定要度量的代码片段，方法是在度量开始的位置设置一个秒表性能分析点，并在度量结束的位置设置另一个秒表性能分析点。开始和结束秒表点按各自的名称配对。

要度量代码片段的执行时间，请执行以下步骤。

1. 在编辑器中打开  ``Anagrams.java``  类，方法是：展开  ``com.toy.anagrams.ui``  源包，然后双击  ``Anagrams.java`` 。
2. 在源代码中找到度量要开始的行，例如第 54 行。
3. 在该行中右键单击，然后从弹出式菜单中选择 *"Profiling"（性能分析）> "Insert Profiling Point"（插入性能分析点）*。
4. 选择 *Stopwatch*（秒表）作为性能分析点类型。单击 "Next"（下一步）。
5. 选择 *Timestamp and duration*（时间戳和持续时间）作为设置。

选择 "Timestamp and duration"（时间戳和持续时间）时，对话框会自动将秒表设置为在代码行的开头开始，并在以下行的结尾结束。您可以修改秒表开始和结束所在的行。



. 修改 *Location (stop)*（位置 (停止)）设置，将结束行更改为开始行之后的几行。单击 "Finish"（完成）。
image::images/stopwatch-dialog.png[title=""New Profiling Point"（新建性能分析点）对话框的屏幕快照"]

设置性能分析点时，开始和结束性能分析点的标注将显示在编辑器的左旁注中。

image::images/ppoints-editor-stopwatch.png[title="在性能分析会话中处于活动状态的性能分析点"]

打开 "Profiling Points"（性能分析点）窗口时，可以看到秒表性能分析点添加到了列表中。



. 单击工具栏中的 "Profile Main Project"（分析主项目）。


. 在 "Select Profiling Task"（选择性能分析任务）对话框中，单击 *CPU* 性能分析任务并选择 *Advanced (instrumented)*（高级（分析））选项。
image::images/select-profiling-task1.png[title=""Select Profiling Task"（选择性能分析任务）对话框"]

*注：*可在分析性能或内存使用情况时使用性能分析点。



. 选择 *Use defined Profiling Points*（使用定义的性能分析点）。单击 "Run"（运行）以启动性能分析会话。

单击 *Show active profiling points*（显示活动的性能分析点）时，可以查看为性能分析会话启用的性能分析点。

image::images/ppoints-profile-stopwatch-act.png[title="在性能分析会话中处于活动状态的性能分析点"]

单击 "Run"（运行）后，IDE 将启动 Anagram Game 应用程序，并开始运行性能分析会话。如果打开 "Profiling Points"（性能分析点）窗口，则可以查看是否遇到了秒表性能分析点。遇到了性能分析点后，可以单击该窗口 "Results"（结果）列中的 *Report*（报告），此时将打开一个窗口，显示与性能分析点相关的数据，以及与执行开始和结束秒表性能分析点之间代码片段所用时间长度相关的数据。

image::images/ppoints-result-stopwatch.png[title="秒表性能分析点的结果报告的屏幕快照"]

*注：*如果这是您首次对项目进行性能分析，有关校准和分析器集成的详细信息，请参见link:profiler-intro.html[+在 NetBeans IDE 中对 Java 应用程序进行性能分析的简介+]。


=== 生成快照或堆转储

如果要在某个非常精确的时刻捕获性能分析数据，则可以使用性能分析点生成性能分析结果的快照或堆（堆转储）。要生成性能分析结果快照（内存或 CPU）或堆转储，可以在源代码中放置 "Take Snapshot"（生成快照）性能分析点，然后选择快照类型，并指定文件的保存位置。如果未指定位置，则所有快照都将保存在主项目文件夹 ( ``nbproject/private`` ) 中。

*注：*在放置快照性能分析点时应格外谨慎，因为如果将该性能分析点放在频繁执行的代码中，则可能遇到该点几百次。

要使用性能分析点生成快照，请执行以下步骤。

1. 在编辑器中打开  ``Anagrams.java``  类，方法是：展开  ``com.toy.anagrams.ui``  源包，然后双击  ``Anagrams.java`` 。
2. 在源代码中找到要放置性能分析点的行。
3. 在该行中右键单击，然后从弹出式菜单中选择 *"Profiling"（性能分析）> "Insert Profiling Point"（插入性能分析点）*。
4. 选择 *Take Snapshot*（生成快照）作为性能分析点类型。单击 "Next"（下一步）。
5. 选择 *Profiling data snapshot*（性能分析数据快照）或 *Heap dump*（堆转储）作为设置。
6. 指定文件的保存位置或保留默认位置。单击 "Finish"（完成）。
image::images/ppoints-profile-snapheap.png[title="选择了堆转储的新生成快照性能分析点"]


. 单击工具栏中的 "Profile Main Project"（分析主项目）。


. 在 "Select Profiling Task"（选择性能分析任务）对话框中，单击 *CPU* 或 *Memory*（内存）并选择 *Advanced (instrumented)*（高级（分析））选项。


. 选择 *Use defined Profiling Points*（使用定义的性能分析点）。单击 "Run"（运行）以启动性能分析会话。

单击 *Show active profiling points*（显示活动的性能分析点）时，可以查看为性能分析会话启用的性能分析点。

单击 "Run"（运行）后，IDE 将启动 Anagram Game 应用程序，并开始运行性能分析会话。如果打开 "Profiling Points"（性能分析点）窗口，则可以查看是否遇到了 "Take Snapshot"（生成快照）性能分析点。如果遇到了性能分析点，则可以单击 "Results"（结果）列中的 *Report*（报告）以打开 "Take Snapshot"（生成快照）窗口，其中显示与性能分析点有关的数据。要查看快照，请在 "Take Snapshot"（生成快照）窗口中单击 "open snapshot"（打开快照）。

快照点与重置点可以有效地搭配使用，以生成堆增量数据。

使用 "Take Snapshot"（生成快照）性能分析点时，会将生成的快照或堆转储自动保存到指定位置。如果已指定将快照保存到项目文件夹中，则保存的快照将自动显示在 "Profiler"（分析器）窗口的 "Saved Snapshots"（保存的快照）列表中。您可以选择相应的项并单击 "Open"（打开），以打开 "Saved Snapshots"（保存的快照）列表中的快照。

*注：*如果指定快照应保存到项目文件夹以外的位置，则快照不会自动列在 "Saved Snapshots"（保存的快照）列表中。要打开 "Saved Snapshots"（保存的快照）列表中未列出的快照，请单击该列表旁边的 "Load"（加载）按钮，然后导航至保存的快照的位置。

image::images/saved-snapshots.png[title=""New Reset Results"（新重置结果）窗格的屏幕快照"]

有关使用快照和堆转储的详细信息，请参见以下文档。

* 有关如何查看和比较快照的详细信息，请参见link:profiler-intro.html[+性能分析简介+]教程的“生成快照”部分。


=== 重置性能分析结果

您可以在任意指定的确切位置重置收集的结果（内存或 CPU），方法是在源代码中放置 "Reset Results"（重置结果）性能分析点。

要设置 "Reset Results"（重置结果）性能分析点，请执行以下步骤。

1. 在编辑器中打开  ``Anagrams.java``  类，方法是：展开  ``com.toy.anagrams.ui``  源包，然后双击  ``Anagrams.java`` 。
2. 在源代码中找到要放置性能分析点的行。
3. 在该行中右键单击，然后从弹出式菜单中选择 *"Profiling"（性能分析）> "Insert Profiling Point"（插入性能分析点）*。
4. 选择 *Reset Results*（重置结果）作为性能分析点类型。单击 "Next"（下一步）。
5. 指定性能分析点的名称，并确保性能分析点的位置正确无误。单击 "Finish"（完成）。
image::images/ppoints-newreset.png[title=""New Reset Results"（新重置结果）窗格的屏幕快照"]


. 单击工具栏中的 "Profile Main Project"（分析主项目）。


. 在 "Select Profiling Task"（选择性能分析任务）对话框中，单击 *CPU* 或 *Memory*（内存）并选择 *Advanced (instrumented)*（高级（分析））选项


. 选择 *Use defined Profiling Points*（使用定义的性能分析点）。单击 "Run"（运行）以启动性能分析会话。

单击 *Show active profiling points*（显示活动的性能分析点）时，可以查看为性能分析会话启用的性能分析点。

单击 "Run"（运行）后，IDE 将启动 Anagram Game 应用程序，并开始运行性能分析会话。如果打开 "Profiling Points"（性能分析点）窗口，则可以查看是否遇到了 "Reset Results"（重置结果）性能分析点。如果遇到了性能分析点，则可以单击 "Results"（结果）列中的 *Report*（报告），以打开一个窗口，显示与性能分析点有关的数据。

image::images/ppoints-results-reset.png[title="重置性能分析点的结果报告的屏幕快照"]link:/about/contact_form.html?to=3&subject=Feedback:%20Using%20Profiling%20Points[+发送有关此教程的反馈意见+]



== 另请参见

本文档介绍了如何在对简单的 NetBeans 项目进行性能分析时使用性能分析点的基础知识。对大多数项目进行性能分析时，上述步骤可能都适用。有关本文档中未介绍的性能分析设置和功能的更详细信息，请查阅相关文档，后者是 IDE 附带的，可以从“帮助”菜单项获得。

有关相关文档，请参见以下资源：

* link:http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ#section-NetBeansUserFAQ-Profiler[+Netbeans 分析器常见问题解答+]
一个包含在 NetBeans IDE 中对应用程序进行性能分析的常见问题的文档
* link:http://wiki.netbeans.org/wiki/view/FaqProfilerProfileFreeForm[+常见问题解答：对自由格式项目进行性能分析+]
* link:profiler-screencast.html[+截屏视频：性能分析点、进一步浏览图和堆查看器+]
介绍 NetBeans IDE 中的一些性能分析功能的演示
* link:../../../community/magazine/html/04/profiler.html[+高级性能分析：理论应用实践+]
* link:http://profiler.netbeans.org/index.html[+profiler.netbeans.org+]
Netbeans 分析器项目站点
* link:http://blogs.oracle.com/nbprofiler[+Netbeans 分析器博客+]
* link:http://profiler.netbeans.org/mailinglists.html[+Netbeans 分析器邮件列表+]

<<top,返回页首>>

