Groovy闭包中的字符串引用导致的内存使用情况

时间:2019-06-26 03:27:34

标签: groovy

我用groovy编写了一个爬虫DSL,该爬虫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

0 个答案:

没有答案