Профилируйте использование процессора в Java на Mac - PullRequest
1 голос
/ 06 октября 2009

Я ищу способ измерить использование процессора для различных методов в моем коде Java. Я понимаю, что этого можно добиться с помощью JNI и C, но я не знаю, с чего начать ...

Целью этого является сравнение различных алгоритмов и получение качественных результатов.

Ответы [ 8 ]

1 голос
/ 06 октября 2009

Sun VisualVM интегрирован в последние версии JDK, и его возможности профилирования описаны здесь . Обратите внимание, что, кажется, требуется довольно свежая версия OSX, если я правильно понимаю это .
Netbeans имеет в основном те же профилирующие машины, я не знаю, поможет ли это.

1 голос
/ 06 октября 2009

Вероятно, наиболее распространенным способом является использование выборки . JVM предоставляет средства для запроса текущей трассировки стека всех потоков (или тех, которые вас интересуют), а также того, сколько ЦП они израсходовали. Таким образом, вы периодически делаете это. При каждом вызове, если поток находится внутри интересующего вас метода, то предположим, что он потратил половину сообщенного времени ЦП с момента последнего опроса внутри этого метода.

Если этот метод звучит уместно, некоторое время назад я написал материал по средствам профилирования Java 5 , который может вам помочь.

Java 5 также предоставляет среду инструментария, с помощью которой вы можете лечить классы по мере их загрузки, чтобы включить вызовы на вход и выход к вашему заданному методу, так что вы можете измерить использование ЦП только внутри этого метода. Однако это немного сложнее в программировании, потому что вам нужно проверить действительные двоичные файлы классов по мере их загрузки.

1 голос
/ 06 октября 2009

Я не думаю, что вы действительно можете идентифицировать использование ЦП до уровня метода с текущим диапазоном профилировщиков. Для большинства методов это довольно очевидно (если метод связан с вычислениями и является однопоточным, то он будет использовать 100% ЦП в зависимости от распределения ОС).

Возможно, вы захотите определить «горячие точки» (методы, которые потребляют больше ресурсов ЦП, чем ожидали - или, возможно, меньше?), И я бы порекомендовал взглянуть на YourKit для простого в настройке профилировщика. .

В противном случае взгляните на интерфейс профилирования JVM ( JVMPI ), который может дать вам дополнительные указания.

0 голосов
/ 03 июня 2012

Вызывайте ваши методы в отдельных потоках и измеряйте разницу времени до и после выполнения данной процедуры.

Чтобы измерить время вызова процесса:

    ManagementFactory.getThreadMXBean().setThreadCpuTimeEnabled(true);
    long threadTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
0 голосов
/ 12 ноября 2009

Чек Джамон . Очень прост в использовании.

0 голосов
/ 06 октября 2009

Я не уверен, что это то, что вам нужно, но я использовал jrat для профилирования в прошлом с приличными результатами.

0 голосов
/ 06 октября 2009

Посмотрите на OperatingSystemMXBean, возможно, вы могли бы посмотреть на что-то до и после вашего метода

long startProcessCpuTime = operatingSystemMXBean.getProcessCpuTime();
long endProcessCpuTime = operatingSystemMXBean.getProcessCpuTime();

только Java6

0 голосов
/ 06 октября 2009

Если вы хотите использовать один из уже доступных инструментов профилирования, тогда вы можете попробовать Shark

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...