Моя модель постепенно замедляется до неприемлемой скорости (то есть от 200 тиков в секунду до нескольких секунд за один тик). Хотелось бы понять, в чем причины этой проблемы. Как проще всего проверить, какая часть модели занимает все больше времени? Раньше я пробовал использовать какой-то другой профилировщик java, но это нехорошо и сложно понять.
Repast: проверьте время выполнения для каждого метода
Ответы (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
Спасибо, я использовал этот метод раньше. проблема в том, что он считает время на выполнение каждого отдельного агента, а это мало. но вместе они большие (вроде 500000 агентов). Есть ли инструменты, которые могут помочь собрать общее время выполнения метода всеми агентами (на уровне набора агентов)?
- person Jack; 06.07.2020
Когда я видел это в своей собственной работе, это обычно связано с тем, что какая-то коллекция, которую я зацикливаю, становится больше с некоторой возрастающей скоростью (например, каждый агент в списке добавляет другого агента к этому типу списка). Возможно, стоит это проверить. В конце концов, профилировщик - отличный способ разобраться в подобных вещах.
- person Nick Collier; 07.07.2020