Cleaner란 Java 9에서 도입되었으며, 이전의 finalize() 메서드보다 더 안전하고 효율적으로 네이티브 리소스나 외부 리소스를 해제하는 데 사용된다.
이 모듈은 특정 리소스가 가비지 콜렉터에 의해 해제될 때 임의의 동작을 수행하도록 하기 위해 사용된다.
Cleaner 동작 내부에서 타겟으로 하는 인스턴스를 참조할 경우 해당 람다가 절대 불리지 않는 걸 주의해야 한다.
또한, 다른 스레드에서 호출될 수 있기 때문에 레이스 컨디션을 주의해야 한다.
finalize의 문제점을 해결하기 위해 나왔지만, 여전히 이 모듈에서도 주의해야할 점이 있기 때문에 일반적으로 close나 try with resources 패턴 사용이 권장된다.