Any plans to make resource leaks easier to detect?

David Alayachew davidalayachew at gmail.com
Thu Mar 7 14:26:51 UTC 2024


Further adding on, here is my final implementation. The folks on Code
Review also informed me, in no uncertain terms, that it was a very
problematic solution. And I agree with them. However, for all of its flaws,
at least it cannot leak due to user's forgetting a TWR.

https://codereview.stackexchange.com/questions/290912/implementation-of-java-util-stream-stream-and-friends-that-reads-lines-from-th

But of course, this is a terrible solution to deal with a non-trivial
problem -- forgetting TWR is not a compiler error/warning. Is there any
chance that we could get better compile time support for detecting resource
leaks?

On Sun, Mar 3, 2024 at 10:02 PM David Alayachew <davidalayachew at gmail.com>
wrote:

> And as a side note, I did some pretty in-depth research on the topic, and
> stumbled on this post on the lambda mailing list during Java 8's creation.
> I am adding it, as it seems to be considering many of the same concerns I
> have now.
>
>
> https://mail.openjdk.org/pipermail/lambda-libs-spec-experts/2013-August/002195.html
>
> On Sun, Mar 3, 2024 at 10:00 PM David Alayachew <davidalayachew at gmail.com>
> wrote:
>
>>
>> Hello Amber Dev Team and Core Libs Dev Team,
>>
>> I am making my own implementation of java.util.stream.Stream that reads
>> data from the internet lazily. It's basically
>> java.nio.file.Files.lines(...), but the file is on the internet instead.
>> Here is a StackOverflow post I made that basically gave birth to idea. Just
>> for context. [1]
>>
>> I used composition -- I held my resource and the stream inside of my
>> container data type. However, I also had this container data type implement
>> java.util.stream.Stream too. This way, the end user can use this object
>> exactly like a Stream.
>>
>> In my implementation, I delegated all method calls to the underlying
>> stream. But, for each terminal operation, I would wrap the delegated calls
>> with try-with-resources for my resources, to prevent resource leak upon
>> exception.
>>
>> Now, I know that this is taking an uphill path to a solution. We could
>> easily tell the user that they have to close the resources themself. Or we
>> could let the user provide their own resources and thus, leave the
>> responsibility on their plate. Or we could use the escape-hatch provided by
>> stream lol, and tell the user to use try-with-resources on my custom
>> stream. As you all intended us to do, I'm sure.
>>
>> I know the reason might seem poorly justified (StackOverflow told me as
>> much -- [1]), but I did this so that none of the users of my stream would
>> have to concern themselves doing try-with-resources. Try-with-resources is
>> an excellent utility, but I have no way to know if I left a resource
>> unclosed because there are no compiler warnings or errors if I do so.
>>
>> Are there any plans to make it easier to detect potential resource leaks?
>> Ideally with a compiler warning or error?
>>
>> Thank you for your time and help!
>> David Alayachew
>>
>> [1] = https://stackoverflow.com/questions/77959436
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20240307/6ba2b2d9/attachment.htm>


More information about the core-libs-dev mailing list