Использование памяти, вызванное ссылками String в Groovy замыканиях - PullRequest
0 голосов
/ 26 июня 2019

Я использовал 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

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