Я использовал groovy для написания искателя DSL, который использует однопоточный цикл событий для имитации одновременного выполнения. Тем не менее, при использовании этого DSL, я обнаружил, что использование памяти программой ненормально высоко. Это не должно стоить 1.7G памяти для этой программы. Я использовал jprofiler для анализа динамической памяти динамической памяти и обнаружил, что в следующем фрагменте кода было создано большое количество экземпляров объектов char [] и String:
reqs = []
domains = ['xxx']
baseUrl = 'https://xxxx'
spider {
generateRequest {
this.reqs.clear()
if (this.domains != null && this.domains.size() > 0) {
this.reqs.add(new HttpGet("${this.baseUrl}${this.domains.get(0)}"))
}
return this.reqs
}
Сначала я подумал, что это проблема с строками задержки GString, поэтому я изменил этот код:
reqs = []
url = 'https://xxxx'
spider {
generateRequest {
this.reqs.clear()
if (this.domains != null && this.domains.size() > 0) {
this.reqs.add(new HttpGet(this.url))
}
return this.reqs
}
Но это не работает, но ускоряет использование памяти. Я только начал использовать Groovy, есть ли проблемы с использованием Groovy закрытия?
JProfiler