Inspectopedia Help

Cleaner captures object reference

Reports Runnable passed to a Cleaner.register() capturing reference being registered. If the reference is captured, it will never be phantom reachable and the cleaning action will never be invoked.

Possible sources of this problem:

  • Lambda using non-static methods, fields, or this itself

  • Non-static inner class (anonymous or not) always captures this reference in java up to 18 version

  • Instance method reference

  • Access to outer class non-static members from non-static inner class

Sample of code that will be reported:

int fileDescriptor; Cleaner.Cleanable cleanable = Cleaner.create().register(this, () -> { System.out.println("adsad"); //this is captured via fileDescriptor fileDescriptor = 0; });

This inspection only reports if the language level of the project or module is 9 or higher.

New in 2018.1

Inspection Details

Available in:

IntelliJ IDEA 2023.3, Qodana for JVM 2023.3

Plugin:

Java, 233.SNAPSHOT

Last modified: 13 July 2023