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
itselfNon-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