Я хочу измерить производительность различных функций в моем проекте. Это будет работать на несколько потоков, так что сейчас у меня есть что-то вроде этогоПользовательская аннотация Java для отслеживания производительности
long start = System.currentTimeMillis();
first();
StatsTracker.putTime("first", System.currentTimeMillis() - start);
...
start = System.currentTimeMillis();
second();
StatsTracker.putTime("second", System.currentTimeMillis() - start);
Где StatsTracker является статическим классом, который просто отслеживает карту выступлений.
Я новичок в написании пользовательских аннотаций, и несколько учебников, которые я видел в Интернете, сделали его немного запутанным. То, что я хочу, в конце концов, что-то вроде этого
@StartTime("first")
first();
@EndTime("first")
...
@StartTime("second")
second();
@EndTime("second")
Тогда для времени аннотации начала/конца, я хочу две аннотации, чтобы записать текущее системное время, а затем положить, что во время выполнения в карту (для записи средняя производительность).
Edit: Это может быть более естественным, чтобы иметь что-то вроде этого перед определением функции:
@TrackTime("first")
public void first() { ... }
Любая помощь приветствуется. Благодаря!
IMHO, первый пример не только проще, но и быстрее, так как многие рамки AOP для поддержки аннотаций имеют накладные расходы. BTW Я бы использовал System.nanoTime() и разогрел код, т. Е. Отмерил первые 10 000 вызовов отдельно. –