Как получить фактическое время выполнения «метода» с помощью Java Reflection? - PullRequest
1 голос
/ 31 марта 2011

Привет, может кто-нибудь помочь мне в этом вопросе

> Я выполняю метод класса Java с использованием Java Reflection . Теперь я хочу получить реальное время выполнения метода независимо от времени, затраченного на отражение .

класс AClass { // метод

void abc () { System.out.println («Привет, мир»); }

// Теперь, используя отражение, я собираюсь вызвать этот метод

AClass aObj = новый AClass ();

Class _cObj = Class.forName ("AClass"); Method _meth_Invoke = cObj.getMethod ("abc", null);

// Теперь послушайте, как вы видите, что если я возьму Штамп времени, то перед выполнением этого (Method.invoke ()) оператора, а затем после возьму другую метку времени и вычту ее (используя «System.nanoTime ()») , затем я получаю ВРЕМЯ обоих методов abc () + invoke (). И вот в чем проблема, которую я просто хочу узнать, фактическое время выполнения метода abc ().

_meth_Invoke.invoke (aObj, ...); }

Пожалуйста, помогите мне, я потратил много времени на серфинг, но не могу найти подходящий материал для него.

Ответы [ 3 ]

2 голосов
/ 31 марта 2011

Используйте профилировщик, чтобы узнать, сколько времени программа тратит на выполнение метода. Если вы используете Oracle JDK 6 (или новее), вы можете использовать JVisualVM , который включен в JDK для профилирования.

Запустите ее, введя команду jvisualvm в окне командной строки.

0 голосов
/ 11 октября 2012

Вы можете измерить время, необходимое для вызова пустого метода (void xyz() {}) через отражение, и вычесть его из времени, которое вы измерили, вызывая метод abc() через отражение. Это настолько точно, насколько вы можете получить программно.

В противном случае вы должны использовать профилировщик, как JVisualVM.

0 голосов
/ 31 марта 2011

Стоимость вызова метода через отражение обычно составляет менее микросекунды. Вы можете проверить это на своей машине, чтобы подтвердить это. Если вы пытаетесь сравнить метод, который составляет менее 10 микросекунд, это очень трудно сделать точно. Если бы это было намного больше, я бы об этом не беспокоился.

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