小编Akh*_*hil的帖子

Java lambdas 堆转储 - lambda 实例没有被垃圾收集

我在用 java 生成应用程序时遇到了一些垃圾收集问题,我使用 Stream.map 修剪列表中的所有元素。匿名 lambda 类的实例存在于堆转储中,即使封闭类的实例为 0,如可视化 VM 的快照所示。

在此处输入图片说明

LambdaTesting 类:

class LambdaTesting {

    protected List<String> values;

    protected LambdaTesting(List<String> values) {
        this.values = values;
    }
    public List<String> modify() {      
        return this.values.stream().map(x -> x.trim()).collect(Collectors.toList());
    }
    public List<String> modifyLocal() {
        List<String> localValue = new ArrayList<>();
        localValue.add("Local FOO ");
        localValue.add("Local BAR ");
        return localValue.stream().map(x -> x.trim()).collect(Collectors.toList());     
   }
}
Run Code Online (Sandbox Code Playgroud)

创建 LambdaTesting 实例并调用这些方法的方法:

public List<String> testMethods() {
    List<String> test = new ArrayList<>();      
    test.add("Global FOO  ");
    test.add("   GLOBAL BAR");  
    LambdaTesting lambdaTesting = new LambdaTesting(test);
    lambdaTesting.modifyLocal(); …
Run Code Online (Sandbox Code Playgroud)

java lambda garbage-collection java-8 java-stream

5
推荐指数
1
解决办法
363
查看次数

标签 统计

garbage-collection ×1

java ×1

java-8 ×1

java-stream ×1

lambda ×1