blob: b396f373e8d63c872a33168dbcfa05cbcbb6db92 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>Введение в профилирование приложений Java в IDE NetBeans</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta name="description" content="An introduction to profiling an application using NetBeans IDE">
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
</head>
<body>
<a name="top"></a>
<h1>Введение в профилирование приложений Java в IDE NetBeans</h1>
<p>IDE NetBeans включает многофункциональный инструмент профилирования, который позволят получить важные сведения о режиме работы приложения во время выполнения. Средство профилирования NetBeans позволяет просто отслеживать состояния потоков, производительность ЦП и использование памяти приложением в среде IDE; оно потребляет сравнительно немного ресурсов.</p>
<p>Этот вводный документ — обзор средства профилирования, входящего в состав среды IDE, и руководство, позволяющее быстро приступить к профилированию проектов NetBeans. Этот документ предназначен продемонстрировать различные задачи профилирования, доступные в среде IDE, и результаты профилирования, которые можно получить при профилировании проекта. В ней не рассматриваются все функции профилирования среды IDE, также не освещена интерпретация результатов профилирования для разрешения определенных проблем производительности, которые могут возникнуть в приложении.</p>
<p>В этом документе будет демонстрироваться использование средства профилирования для получения данных профилирования о примере приложения Anagram Game, простого приложения Java, входящего в состав среды IDE. Хотя Anagram Game — это очень простой проект приложения Java, при профилировании больших и более сложных приложений Java, а также проектов корпоративных и веб-приложений желательно выполнять те же действия.</p>
<p>В этом документе показано использование среды IDE для профилирования приложения и получения следующих результатов профилирования:</p>
<ul>
<li>Поведение приложения при выполнении</li>
<li>Время ЦП, используемое методами приложения</li>
<li>Создание объекта</li>
</ul>
<p>Кроме того, в этом документе показано получение и сравнение снимков результатов профилирования.</p>
<img alt="Содержимое на этой странице применимо к IDE NetBeans 6.9, 7.0, 7.1 и 7.2" class="stamp" src="../../../images_www/articles/70/netbeans-stamp-70-71-72.gif" title="Содержимое этой страницы применимо к IDE NetBeans 6.9, 7.0, 7.1 и 7.2" />
<p><b>Содержание</b></p>
<ul class="toc">
<li><a href="#firsttime">Первое профилирование</a>
<ul class="toc">
<li><a href="#create"></a>Создание примера проекта</li>
<li><a href="#calibrate">Первое использование средства профилирования</a></li>
</ul>
</li>
<li><a href="#select">Выбор задачи профилирования</a>
<ul class="toc">
<li><a href="#monitor">Наблюдение за приложением</a></li>
<li><a href="#cpu">Анализ производительности приложения</a>
<li><a href="#memory">Анализ использования памяти</a></li>
</ul>
</li>
<li><a href="#snapshot">Получение моментального снимка</a>
<ul class="toc">
<li><a href="#takesnap">Получение и сравнение моментальных снимков памяти</a></li>
</ul>
</li>
</ul>
<h2>Начало работы</h2>
<div class="indent">
<h3>Предпосылки</h3>
<p>Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:</p>
<ul>
<li>Программирование на Java</li>
<li>IDE NetBeans</li>
</ul>
<h3>Программное обеспечение, требуемое для работы с данным учебным курсом.</h3>
<p>Для работы с этим учебным курсом на компьютере должно быть установлено следующее программное обеспечение.</p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Программное обеспечение или материал</th>
<th class="tblheader" scope="col">Требуемая версия</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">IDE NetBeans</a></td>
<td class="tbltd1">6.9, 7.0, 7.1, 7.2</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Комплект для разработчика на языке Java (JDK)</a></td>
<td class="tbltd1">Версия 6 или 7</td>
</tr>
</tbody>
</table>
<p class="notes"><strong>Примечания.</strong></p>
<ul>
<li>Инструмент профилирования включен в комплект с IDE NetBeans и для начала профилирования приложения не требуется дополнительная настройка.</li>
</ul>
</div>
<a name="firsttime"></a>
<h2>Первое профилирование</h2>
<p>При первом использовании средства профилирования среде IDE необходимо выполнить некоторые начальные операции для обеспечения получения точных результатов профилирования и интеграции средства с проектом. Чтобы продемонстрировать это, создадим проект AnagramGame, а затем выполним калибровку. Среда IDE автоматически выполнит интеграцию при первом профилировании проекта AnagramGame.</p>
<div class="indent">
<a name="create"></a>
<h3>Создание примера проекта</h3>
<p>В этом документе будет выполнено профилирование примера проекта Anagram Game. Для этого вам сначала необходимо использовать мастер создания проектов для создания примера приложения и настроить проект, как главный проект.</p>
<p>Для создания приложения Anagram Game выполните следующие действия.</p>
<ol>
<li>Выберите &quot;Файл &gt; Новый проект&quot; (CTRL+SHIFT+N; &amp;#8984+SHIFT+N в Mac ОС) в главном меню.</li>
<li>В мастере создания проекта выберите категорию &quot;Примеры &gt; Java&quot;.</li>
<li>Выберите проект &quot;Anagram Game&quot;. Нажмите кнопку &quot;Далее&quot;.</li>
<li>Укажите местоположение проекта. Нажмите кнопку &quot;Завершить&quot;.
<p>При нажатии кнопки &quot;Готово&quot; среда IDE создает пример проекта Anagram Game. </p>
</li>
<li>Выберите 'Выполнить' > 'Настроить основной проект' > AnagramGame в главном меню.</li>
</ol>
<p>После настройки проекта как основного имя проекта Anagram Game будет выделено полужирным в окне 'Проекты'. По умолчанию при использовании среды IDE для профилирования проекта среда IDE профилирует главный проект. Если ни один проект не выбран в качестве главного, среда IDE выполнит профилирование проекта, который выбран в окне 'Проекты'.</p>
<a name="calibrate"></a>
<h3>Первое использование средства профилирования</h3>
<p>Для получения точных результатов профилирования требуются данные калибровки для каждой платформы Java, которая будет использоваться для профилирования. При первом запуске средства профилирования, или если допустимые данные калибровки недоступны для данной платформы Java, среда IDE запросит выполнить процесс калибровки для вашей платформы.</p>
<p>Калибровка должны быть выполнена только один раз. Однако при внесении значительных изменений в комплектацию компьютера, которая может повлиять на его производительность, необходимо снова выполнить калибровку. Калибровку можно выполнить в любое время, выполнив следующие действия.</p>
<ol>
<li>Выберите &quot;Дополнительные команды &gt; Выполнить калибровку средства профилирования&quot; в меню &quot;Профиль&quot;.</li>
<li>Выберите платформу Java. Нажмите кнопку &quot;ОК&quot;.</li>
</ol>
<img alt="Диалоговое окно &quot;Выбор платформы Java&quot;." class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/calibrate-select-platform.png" title="Диалоговое окно для выбора платформы Java при калибровке." />
<p>По завершении операции калибровки появится диалоговое окно. Можно нажать кнопку &quot;Показать подробные сведения&quot;, чтобы просмотреть диалоговое окно с информацией о результатах калибровки. Данные калибровки для каждой платформы Java сохраняются в каталоге <tt>.nbprofile</tt> в домашнем каталоге.</p>
<img alt="снимок диалогового окна 'Сведения о калибровке'" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/calibrate-information.png" title="Диалоговое окно &quot;Сведения о калибровке&quot;." />
<p class="notes"><strong>Примечание.</strong> При использовании IDE NetBeans 6.9 или более ранней версии при первом профилировании проекта отображается диалоговое окно, в котором указывается, что среде IDE требуется интеграция инструмента профилирования с целевым проектом.</p>
<div class="indent">
<img alt="Диалоговое окно 'Включить поддержку профилирования'" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/profile-intro-integrate.png" title="Диалоговое окно для интеграции средства профилирования с проектом" />
<p>Для интеграции с проектом среда IDE добавляет к сценарию сборки (<tt>build.xml</tt>) проекта следующую строку для импорта дополнительного сценария сборки для необходимых библиотек профилирования.</p>
<pre class="examplecode">&lt;import file=&quot;nbproject/profiler-build-impl.xml&quot;/&gt;</pre>
<p>
Перед изменением сценария сборки среда IDE создает резервную копию исходного сценария сборки (<tt>build-before-profiler.xml</tt>). Можно восстановить исходный сценарий сборки в любое время, выбрав &quot;Дополнительные команды &gt; Удалить профилирование&quot; в меню &quot;Профилировать&quot;.</p>
</div>
</div>
<a name="select"></a>
<h2>Выбор задачи профилирования</h2>
<p>Среда IDE предоставляет ряд внутренних параметров, позволяющих настраивать профилирования в соответствии с вашими требованиями. Например, можно уменьшить дополнительный расход ресурсов на профилирование за счет уменьшения объема созданной информации. Однако ознакомление со множеством доступных параметров может занять некоторое время. Для большинства приложений параметров по умолчанию, указанных для задач профилирования, достаточно для большинства ситуаций.</p>
<p>При профилировании проекта используется диалоговое окно &quot;Выбор задачи профилирования&quot; для выбора задачи в соответствии с необходимо информацией профилирования. В следующей таблице описываются задачи профилирования и результаты, получаемые в результате выполнения задачи.</p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Задача профилирования</th>
<th class="tblheader" scope="col">Результаты</th>
</tr>
<tr>
<td class="tbltd1"><a href="#monitor">Наблюдение за приложением</a></td>
<td class="tbltd1">Выберите для получения высокоуровневой информации о свойствах целевой JVM, включая активность потоков и распределение памяти.</td>
</tr>
<tr>
<td class="tbltd1"><a href="#cpu">Анализ производительности ЦП</a></td>
<td class="tbltd1">Выберите для получения подробных данных о производительности приложения, включая время выполнения методов и число вызовов метода.</td>
</tr>
<tr>
<td class="tbltd1"><a href="#memory">Анализ использования памяти</a></td>
<td class="tbltd1">Выберите для получения подробной информации о выделении объектов и сборке мусора.</td>
</tr>
</table>
<p>Диалоговое окно &quot;Выбор задачи профилирования&quot; — основной интерфейс для выполнения задач профилирования. После выбора задачи можно изменить ее параметры для точной настройки получаемых результатов. Для каждой задачи профилирования также можно создать и сохранить пользовательские задачи профилирования на основе данной задачи. При создании пользовательской задачи профилирования она будет указана в диалоговом окне &quot;Выбрать задачу профилирования&quot;, что позволяет позже просто найти и выполнить пользовательские параметры. При создании пользовательской задачи профилирования можно изменить дополнительные параметры профилирования, нажав кнопку <b>Дополнительные параметры</b> в диалоговом окне &quot;Выбрать задачу профилирования&quot;.</p>
<div class="indent">
<a name="monitor"></a>
<h3>Наблюдение за приложением</h3>
<p>При выборе задачи наблюдения целевое приложение запускается без каких-либо инструментов. При наблюдении за приложением вы получаете высокоуровневую информацию о нескольких важных свойствах целевой JVM. Поскольку наблюдение за приложением не требует большого дополнительного расхода ресурсов, можно запускать приложение в этом режиме в течение длительного времени.</p>
<p>Для наблюдения за приложением Anagram Game выполните следующие действия.</p>
<ol>
<li>Убедитесь, что проект AnagramGame установлен как главный проект.</li>
<li>Выберите &quot;Профиль &gt; Профилировать главный проект&quot; в главном меню.
<p>Также можно щелкнуть правой кнопкой мыши узел проекта в окне 'Проекты' и выбрать 'Профиль'.</p></li>
<li>Выберите &quot;Наблюдение&quot; в диалоговом окне &quot;Выбор задачи профилирования&quot;.</li>
<li>При необходимости выберите дополнительные параметры монитора. Нажмите кнопку &quot;Выполнить&quot;.<br> <img alt="Диалоговое окно 'Выбор задачи профилирования' - приложение монитора" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/monitor-task.png" title="Выбор задачи профилирования приложения монитора">
<p class="tips">Можно подвести курсор к параметру для просмотра всплывающей подсказки со сведениями о параметре.</p>
</li>
</ol>
<p>При нажатии кнопки &quot;Выполнить&quot; среда IDE запускает приложение, и открывается окно &quot;Средство профилирования&quot; в левой панели среды IDE. В окне &quot;Средство профилирования&quot; содержатся элементы управления, позволяющие выполнять следующие действия.</p>
<ul>
<li>Контроль за задачей профилирования</li>
<li>Просмотр состояния текущей задачи профилирования</li>
<li>Отображение результатов профилирования</li>
<li>Управление моментальными снимками результатов профилирования</li>
<li>Просмотр статистики основной телеметрии</li>
</ul>
<p>Можно использовать элементы управления в окне &quot;Средство профилирования&quot; или главном меню для открытия окон, в которых можно просматривать данные наблюдения. Окно &quot;Обзор телеметрии&quot; можно использовать для быстрого получения обзора данных наблюдения в реальном времени. Если поместить курсор на график, можно просмотреть более подробную статистику отображающихся в графике данных. Можно дважды щелкнуть любой график в окне &quot;Обзор телеметрии&quot; для открытия более крупной и подробной версии графика.</p>
<img alt="снимок окна 'Обзор телеметрии'" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/profile-intro-telemoverview.png" title="Окно 'Обзор телеметрии'">
<p class="tips">Если обзор не открывается автоматически, можно выбрать &quot;Окно &gt; Профилирование &gt; Обзор телеметрии&quot;, чтобы открыть окно вывода. Можно открыть окно &quot;Обзор телеметрии VM&quot; и просмотреть данные наблюдения в любое время во время сеанса профилирования.<p>
<a name="cpu"></a>
<h3>Анализ производительности ЦП</h3>
<p>При выборе задачи ЦП среда IDE профилирует производительность ЦП уровня метода (время выполнения) приложения и обрабатывает результаты в реальном времени. Можно выбрать анализ производительности путем периодического выполнения трассировки стека или инструментирования методов в приложении. Можно выбрать инструментирование всех методов или ограничить инструментирование частью кода приложения, даже определенным фрагментом кода.</p>
<p>Для анализа производительности ЦП можно выбрать способ профилирования приложения, выбрав один из следующих вариантов.</p>
<ul>
<li><b>Быстрый (образец).</b> В этом режиме IDE создает образец приложения и периодически создает трассировку стека. Этот вариант менее точен, чем методы инструментирования, но вызывает меньший дополнительный расход ресурсов. Этот вариант может помочь выбрать методы для инструментирования.</li>
<li><b>Расширенный (инструментация).</b> В этом режиме методы профилируемого приложения инструментируются. Среда IDE регистрирует вход и выход потоков в методы проекта, позволяя отслеживать время, затрачиваемое на каждый метод. При входе в метод потоки создают событие &quot;вход в метод&quot;. При выходе из метода потоки создают соответствующее событие &quot;выход из метода&quot;. Записываются метки времени обоих событий. Эти данные обрабатываются в реальном времени.
<p>Можно выбрать инструментирование всех методов приложения или ограничить инструментирование поднабором кода приложения, указав один или несколько <b>корневых методов</b>. Корневой метод можно указать, используя всплывающее меню в исходном коде, или щелкнув <b>настроить</b>, чтобы открыть диалоговое окно &quot;Изменить корневые методы профилирования&quot;.</p>
<p>Корневой метод — это метод, класс или пакет в исходном коде, который можно указать как корень обработки. Данные профилирования собираются при входе и выходе одного из потоков приложения из корня обработки. До входа одного из потоков приложения в корневой метод данные профилирования не собираются. Указание корневого метода может значительно снизить дополнительный расход ресурсов на профилирование. Для некоторых приложений указание корневого метода может быть единственным способом получения подробных и/или реалистичных данных производительности, поскольку профилирование всего приложения может создать так много данных профилирования, что приложение станет непригодным к использованию, или даже произойдет отказ приложения.</p>
</li>
</ul>
<p class="notes"><b>Примечание.</b> Режим профиля Quick недоступен в IDE NetBeans 7.0 и более ранних версиях. Можно использовать только инструментирование для получения результатов профилирования, но можно выбрать инструментирование всего приложения или ограничить инструментирование частью приложения, указав один или несколько корневых методов.
</p>
<p class="tips">Можно еще больше уточнить код для профилирования, используя фильтр для ограничения исходного кода для инструментирования.</p>
<p>Теперь среда IDE будет использоваться для анализа производительности ЦП приложения Anagram Game. Необходимо выбрать вариант &quot;Часть приложения&quot;, а затем <tt>WordLibrary.java</tt> в качестве корневого метода профилирования. При выборе этого класса в качестве корневого метода профилирования последнее ограничивается методами в этом классе.</p>
<ol>
<li>Нажмите кнопку &quot;Остановить&quot; в окне &quot;Средство профилирования&quot;, чтобы остановить предыдущий сеанс профилирования (если он еще запущен).</li>
<li>Выберите &quot;Профиль &gt; Профилировать главный проект&quot; в главном меню.</li>
<li>Выберите &quot;ЦП&quot; в диалоговом окне &quot;Выбор задачи профилирования&quot;.</li>
<li>Выберите <strong>Расширенный (инструментарий)</strong>.
<p>Для использования этого варианта также необходимо указать корневой метод профилирования.</p></li>
<li>Нажмите кнопку <b>настроить</b>, чтобы открыть диалоговое окно &quot;Изменение корневых методов профилирования&quot;.<br /> <img alt="Диалоговое окно 'Выбор задачи профилирования' - ЦП" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/select-cpu-task.png" title="Выбор задачи профилирования ЦП" /></li>
<li>В диалоговом окне 'Изменение корневых методов профилирования' разверните узел AnagramGame и выберите <tt>Sources/com.toy.anagrams.lib/WordLibrary</tt>. При профилировании проекта можно указать несколько корневых методов профилирования.<br /> <img alt="диалоговое окно для выбора корневых методов" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/edit-profiling-roots.png" title="Диалоговое окно для выбора корневых методов" /></li>
<li>Нажмите кнопку &quot;Дополнительно&quot;, чтобы открыть диалоговое окно &quot;Изменение корневых методов профилирования (Дополнительно)&quot;, в котором доступны дополнительные параметры для добавления, изменения и удаления корневых методов.<br /> <img alt="Диалоговое окно для указания корневых методов" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/edit-profiling-roots-adv.png" title="Диалоговое окно для указания корневых методов" />
<p>Можно видеть, что <tt>WordLibrary</tt> указан как корневой метод. Нажмите &quot;ОК&quot;, чтобы закрыть диалоговое окно &quot;Изменение корневых методов профилирования (Расширенное)&quot;.</p>
</li>
<li>Нажмите &quot;ОК&quot;, чтобы закрыть диалоговое окно &quot;Изменение корневых методов профилирования&quot;.
<p>После выбора корневых методов профилирования можно щелкнуть <b>правка</b> в диалоговом окне 'Выбор задачи профилирования' дл изменения выбранного корневого метода.</p></li>
<li>Выберите <b>Профилировать только классы проекта</b> для значения &quot;Фильтр&quot;.
<p>
Фильтр позволяет ограничить инструментируемые классы. Можно выбрать один из предварительно определенных фильтров профилирования IDE или создать собственные пользовательские фильтры. Щелкните <b>Показать значение фильтра</b> для просмотра списка классов, которые будут профилированы при применении выбранного фильтра.
</p>
<img alt="Диалоговое окно 'Показать значени фильтра'" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/show-filter-value.png" title="Диалоговое окно 'Показать значени фильтра'" />
</li>
<li>Нажмите кнопку &quot;Выполнить&quot; в диалоговом окне &quot;Выбрать задачу профилирования&quot; для начала сеанса профилирования.</li>
</ol>
<p>При нажатии кнопки &quot;Выполнить&quot; среда IDE запускает приложение Anagram Game и запускает сеанс профилирования. Чтобы просмотреть результаты профилирования, нажмите кнопку &quot;Текущие результаты&quot; в окне &quot;Средство профилирования&quot;, при этом откроется окно &quot;Текущие результаты&quot;. В окне &quot;Текущие результаты&quot; отображаются собранные на этот момент данные профилирования. По умолчанию отображаемые данные обновляются каждые несколько секунд. При анализе производительности ЦП в окне &quot;Текущие результаты&quot; отображаются сведения о времени, затраченным для каждого метода, и число вызовов каждого метода. Можно видеть, что в приложении Anagram Game изначально вызываются только выбранные корневые методы.</p>
<img alt="снимок текущих результатов ЦП" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/cpu-liveresults1.png" title="Текущие результаты ЦП" />
<p>Вы можете быстро перейти к исходному коду, содержащему любой из перечисленных методов, щелкнув правой кнопкой мыши имя метода и выбрав 'Перейти к источнику'. При щелчке 'Перейти к исходному коду' класс открывается в редакторе исходного кода.</p>
<a name="memory"></a>
<h3>Анализ использования памяти</h3>
<p>Задач &quot;Анализ использования памяти&quot; предоставляет данные об объектах, выделенных в целевом приложении, таких как число, тип и расположение выделенных объектов. </p>
<p>Для анализа производительности памяти необходимо выбрать объем данных для получения, выбрав один из следующих вариантов.</p>
<ul>
<li><b>Регистрировать только создание проектов.</b> Если выбран этот параметр, все классы, которые в настоящее время загружены целевой JVM (и каждый новый класс по мере его загрузки) инструментируются для создания данных о распределении объектов.</li>
<li><b>Регистрировать создание объектов и сборку мусора</b>. Если выбрано, профилирование приложений позволяет получить сведения о жизнеспособности объектов, включая сведения о том, сколько объектов каждого типа все еще жизнеспособны, каков их размер и средний возраст, а также распределение данных.</li>
</ul>
<p>Первый вариант — это функциональное подмножество второго, имеющее меньший дополнительный расход ресурсов по производительности и памяти. Показатель &quot;Накладные расходы&quot; в окне &quot;Выбрать задачу профилирования&quot; предоставляет примерное увеличение или уменьшение дополнительного расхода ресурсов на профилирование в соответствии с выбранными вариантами профилирования.</p>
<p>В этом упражнении среда IDE будет использоваться для анализа производительности памяти приложения Anagram Game. Необходимо выбрать вариант <b>Регистрировать создание объектов и сборку мусора</b> и пункт <b>Регистрировать трассировку стека для операций выделения</b>, чтобы среда IDE регистрировала весь стек вызовов. При выборе этого варианта при получении моментального снимка можно просмотреть обратное дерево вызовов для метода, вызывающего эти выделенные объекты.</p>
<ol>
<li>Нажмите кнопку &quot;Остановить&quot; в окне &quot;Средство профилирования&quot;, чтобы остановить предыдущий сеанс профилирования (если он еще запущен) и приложение Anagram Game.</li>
<li>Выберите &quot;Профиль &gt; Профилировать главный проект&quot; в главном меню.</li>
<li>Выберите &quot;Память&quot; в диалоговом окне &quot;Выбрать задачу профилирования&quot;.</li>
<li>Выберите <strong>Регистрировать создание объектов и сборку мусора</strong>.</li>
<li>Для параметра трассировки размещения каждого из N объектов оставьте значение по умолчанию, 10.
<p>Этот параметр устанавливает интервал /пропорцию для опроса стека. При установке значения 10 для каждого класса будет полностью зарегистрировано только каждое десятое выделение объекта. Для регистрации всей информации для каждого объекта можно установить значение 1. Однако это значительно увеличит дополнительный расход ресурсов на профилирование.</p></li>
<li>Выберите <b>Регистрировать трассировку стека для операций выделения</b>. Нажмите кнопку &quot;Выполнить&quot; для начала сеанса профилирования.
<p>Обратите внимание, что при выборе этого варианта значение показателя &quot;Накладные расходы&quot; значительно увеличивается, но приложение достаточно мало для того, чтобы снижение производительности было приемлемым.</p>
<img alt="Диалоговое окно 'Выбор задачи профилирования' - Память" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-task.png" title="Выбор задачи профилирования памяти" /></li>
</ol>
<p>При нажатии кнопки &quot;Выполнить&quot; среда IDE запускает приложение Anagram Game и запускает сеанс профилирования. Чтобы просмотреть результаты профилирования, нажмите кнопку &quot;Текущие результаты&quot; в окне &quot;Средство профилирования&quot;, при этом откроется окно &quot;Текущие результаты&quot;. В окне &quot;Текущие результаты&quot; отображается информация о размере и числе объектов, выделенных в нашем проекте. </p>
<p>По умолчанию результаты сохраняются и отображаются как число выделенных байтов, но можно щелкнуть заголовок столбца, чтобы изменить способ отображения результатов. Также можно выполнить фильтрацию результатов, введя имя класса в поле фильтра под списком.</p>
<img alt="Результаты профилирования памяти" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-liveresults.png" title="Результаты профилирования памяти" width="580" />
</div>
<a name="snapshot"></a>
<h2>Получение моментального снимка</h2>
<p>При выполнении сеанса профилирования можно сохранить результаты профилирования, получив моментальный снимок. Моментальный снимок сохраняет данные профилирования на момент получения снимка. Однако моментальные снимки отличаются от текущих результатов профилирования следующим.</p>
<ul>
<li>Моментальные снимки могут быть исследованы, когда сеанс профилирования не запущен.</li>
<li>Моментальные снимки содержат более подробную запись данных профилирования, чем текущие результаты.</li>
<li>Моментальные снимки просты в сравнении (моментальные снимки памяти).</li>
</ul>
<p>Поскольку для открытия моментальных снимков проекта сеанс профилирования выполняться не должен, можно открыть моментальный снимок проекта в любое время, выбрав снимок в списке сохраненных моментальных снимков в окне &quot;Средство профилирования&quot; и выбрав &quot;Открыть&quot;.</p>
<div class="indent">
<a name="takesnap"></a>
<h3>Получение и сравнение моментальных снимков памяти</h3>
<p>Для приложения Anagram Game можно получить моментальный снимок результатов, чтобы просмотреть трассировку стека выделения для объектов типа <tt>Строка</tt>. Можно получить другой моментальный снимок или сравнить два снимка. Путем сравнения моментальных снимков памяти можно просмотреть, какие объекты были созданы или освобождены из кучи в интервале между получения двух моментальных снимков. Моментальные снимки должны быть сравнимыми, что означает, что тип профилирования (например, выделения и жизнеспособность) и число отслеживаемых объектов должны совпадать.</p>
<p>В этом упражнении будет получен и сохранен моментальный снимок в проекте. Затем будет получен второй моментальный снимок и сравнен с первым.
</p>
<ol>
<li>Убедитесь, что сеанс профилирования по-прежнему выполняется.<br /> (Если сеанс профилирования остановлен, повторите действия для анализа производительности памяти и откройте окно &quot;Текущие результаты&quot;.)</li>
<li>Правой кнопкой мыши щелкните строку, содержащую <tt>java.lang.String</tt>, в окне &quot;Текущие результаты&quot; и выберите &quot;Получить снимок и показать стек операций выделения памяти&quot;.
<p>Среда IDE получает моментальный снимок памяти и открывает его во вкладке &quot;Трассировка стека операций выделения памяти&quot;. На вкладке &quot;Трассировка стека операций выделения памяти&quot; можно изучить обратное дерево вызовов для методов, создавших экземпляр выбранного объекта.</p>
<img alt="Снимок результатов профилирования памяти" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-snapshot1.png" title="Снимок результатов профилирования памяти" /></li>
<li>Нажмите кнопку &quot;Сохранить моментальный снимок в проекте&quot; на панели инструментов моментального снимка (Ctrl-S; &#8984-S в Mac), чтобы сохранить моментальный снимок памяти в проекте. При сохранении моментального снимка в проекте он добавляется к списку сохраненных моментальных снимков Anagram Game в окне &quot;Средство профилирования&quot;. По умолчанию моментальные снимки физически сохраняются в каталоге <tt>nbproject/private/profiler</tt> проекта. К сохраненным моментальным снимкам добавляются суффикс <tt>.nps</tt>.
<p class="notes"><b>Примечание.</b> Вы можете сохранять снимки в любом местоположении файловой системы, но только снимки, сохраненные в папке по умолчанию в проекте, будут указаны в окне средства профилирования. Также можно нажать кнопку &quot;Сохранить текущее представление в изображении&quot; на панели инструментов моментального снимка, чтобы сохранить снимок как файлы изображений (<tt>.png</tt>), которые можно просмотреть вне среды IDE.</p>
</li>
<li>Получите другой моментальный снимок, нажав кнопку &quot;Сделать моментальный снимок собранных результатов&quot; на панели инструментов &quot;Текущие результаты&quot; (или нажмите кнопку &quot;Сделать моментальный снимок&quot; в окне &quot;Средство профилирования&quot;). Сохраните моментальный снимок.</li>
<li>В окне одного из снимков памяти, нажмите кнопку 'Вычислить разницу' (&nbsp;<img alt="Кнопка 'Сравнить списки'" src="../../../images_www/articles/72/java/profile-intro/comparesnapshots.png" style="vertical-align:bottom;margin-top:2px;" title="Кнопка 'Сравнить списки'" />&nbsp;) на панели инструментов снимков. Или выберите &quot;Профиль &gt; Сравнить моментальные снимки памяти&quot; в главном меню.</li>
<li>В окне &quot;Выбор моментального снимка для сравнения&quot; выберите один из открытых моментальных снимков в списке. Нажмите кнопку &quot;ОК&quot;.<br> <img alt="снимок диалогового окна 'Выбрать снимки для сравнения'" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/select-snapshot.png" title="Диалоговое окно 'Выбрать снимки для сравнения'" />
<p>После открытия моментального снимка памяти можно сравнить его с другими сравнимыми снимками памяти. Снимок экрана можно сравнить с текущими открытыми несохраненными снимками или со снимками, которые сохранены в проекте или где-либо в ином месте системы.</p>
<p>При нажатии кнопки &quot;ОК&quot; откроется окно &quot;Сравнение жизнеспособности&quot;, в котором отображается сравнение двух моментальных снимков памяти.</p>
<img alt="снимок результатов сравнения жизнеспособности" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-compare.png" title="вкладка. на которой отображаются результаты сравнения жизнеспособности двух снимков памяти" /></li>
</ol>
<p>Сравнение моментальных снимков сходно с моментальным снимком памяти, но на нем отображается только различия двух моментальных снимков. Графическая полоса в столбце &quot;Выделенные байты&quot; позволяет просто просмотреть различия выделенных байтов. Если левая половина ячейки в этом столбце зеленая, это означает, что число выделенных байтов для этого объекта меньше при получении второго моментального снимка, чем при получении первого. Если правая половина ячейки красная, это означает, что число выделенных байтов выше во втором моментальном снимке, чем в первом. В других столбцах можно видеть, что знак плюс ( + ) означает увеличение значения, а знак минус ( - ) уменьшение значения.
</p>
<p class="notes"><strong>Примечание.</strong> Также можно настроить точки профилирования для создания снимков, что позволит добиться более точного контроля над временем создания снимков. Дополнительные сведения о создании моментальных снимков с помощью точек профилирования см. в разделе <a href="../../docs/java/profiler-profilingpoints.html">Использование точек профилирования в IDE NetBeans</a>.</p>
</div>
<div class="feedback-box">
<a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Introduction%20to%20Profiling">Отправить отзыв по этому учебному курсу</a></div>
<br style="clear:both;">
<a name="seeAlso"></a>
<h2>Дополнительные сведения</h2>
<p>На этом завершается введение в профилирование приложения с помощью IDE NetBeans. В этом документе были продемонстрированы основы использования среды IDE для профилирования простого проекта NetBeans, а также просмотр результатов профилирования. Описанные выше действия применяются при профилировании большинства проектов. Для профилирования более сложных проектов, таких как приложения J2EE и проекты свободной формы, могут требоваться дополнительные действия по настройке.</p>
<p>Для получения более подробной информации о параметрах и функциях профилирования, не рассмотренных в этом документе, воспользуйтесь документацией, входящей в состав среды IDE и доступной из меню &quot;Справка&quot;.<p>
<p>Сопутствующая документация приведена в следующих ресурсах.</p>
<ul>
<li><a href="http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ#section-NetBeansUserFAQ-Profiler">Часто задаваемые вопросы по профилировщику NetBeans</a><br /> Документ содержит часто задаваемые вопросы по профилированию приложений в среде IDE NetBeans</li>
<li><a href="http://wiki.netbeans.org/wiki/view/FaqProfilerProfileFreeForm">Часто задаваемые вопросы: профилирование проекта произвольной формы</a></li>
<li><a href="profiler-screencast.html">Демонстрация: точки профилирования, детализированные графики, анализатор кучи</a><br /> Демонстрация некоторых функций профилирования в среде IDE NetBeans</li>
<li><a href="../../../community/magazine/html/04/profiler.html">Расширенное профилирование: теория на практике</a></li>
<li><a href="http://www.javapassion.com/handsonlabs/nbprofilermemory/">Поиск утечек памяти с помощью средства профилирования NetBeans</a><br /> Практическое лабораторное занятие на <a href="http://www.javapassion.com/">сайте JavaPassion</a></li>
<li><a href="http://profiler.netbeans.org/index.html">profiler.netbeans.org</a><br /> Сайт проекта средства профилирования NetBeans</li>
<li><a href="http://blogs.oracle.com/nbprofiler">Блог по средству профилирования NetBeans</a></li>
<li><a href="http://profiler.netbeans.org/mailinglists.html">Списки рассылки по средству профилирования NetBeans</a></li>
</ul>
<p class="align-center"><a href="#top">В начало</a></p>
</body>
</html>