报告正在对传递给 Cleaner.register() 捕获引用的 Runnable 进行注册的情况。 如果引用被捕获,它将永远不是虚可达的,且永远不会调用清理操作。

此问题的可能来源:

将报告的代码示例:


  int fileDescriptor;
  Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> {
    System.out.println("adsad");
    //this 通过 fileDescriptor 捕获
    fileDescriptor = 0;
  });

仅当项目或模块的语言级别为 9 或更高时,此检查才会报告。

2018.1 最新变化