Repast: проверьте время выполнения для каждого метода

Моя модель постепенно замедляется до неприемлемой скорости (то есть от 200 тиков в секунду до нескольких секунд за один тик). Хотелось бы понять, в чем причины этой проблемы. Как проще всего проверить, какая часть модели занимает все больше времени? Раньше я пробовал использовать какой-то другой профилировщик java, но это нехорошо и сложно понять.


person Jack    schedule 06.07.2020    source источник


Ответы (1)


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

long start = System.nanoTime(); 

// some model code here

long end= System.nanoTime();

System.println("Step A time in seconds: " + (end - start)/1E9);   


person Eric Tatara    schedule 06.07.2020
comment
Спасибо, я использовал этот метод раньше. проблема в том, что он считает время на выполнение каждого отдельного агента, а это мало. но вместе они большие (вроде 500000 агентов). Есть ли инструменты, которые могут помочь собрать общее время выполнения метода всеми агентами (на уровне набора агентов)? - person Jack; 06.07.2020
comment
Когда я видел это в своей собственной работе, это обычно связано с тем, что какая-то коллекция, которую я зацикливаю, становится больше с некоторой возрастающей скоростью (например, каждый агент в списке добавляет другого агента к этому типу списка). Возможно, стоит это проверить. В конце концов, профилировщик - отличный способ разобраться в подобных вещах. - person Nick Collier; 07.07.2020