On Mon, 7 Oct 2024 16:06:08 GMT, Chen Liang <li...@openjdk.org> wrote:

>> This is correct, but then we would keep the reference to the char sequence 
>> "forever", without any good reason. This content could be *huge* (and often 
>> it is, as `CharSequence` most often is a `StringBuilder` just because the 
>> application *wants* to create huge content, and `String`-concatenation would 
>> be too costly with *huge* content). In fact, I see this scenario as the top 
>> use case for this new API.
>> 
>> Having said that, I would really like to have this field non-final to unlink 
>> the reference to the source as soon as possible, implicitly allowing GC to 
>> free this unused memory.
>
>> keep the reference to the char sequence "forever"
> 
> Note that this only happens if the `Reader` instance is kept forever; but a 
> `Reader` is supposed to be used and closed and discarded instead of being 
> held indefinitely after closing. If users are bad enough, they can never call 
> `close` and the non-final `cs` is still leaked.
> 
> The right way of GC freeing is to let the GC free the reader and the char 
> sequence together, instead of allowing to free when a client keeps this 
> reader instance erroneously after closing.

I really do see you point, nevertheless I think we should be kind to "bad" 
users, too. In the end, there is *no* specification which explicitly tells 
"bad" users that readers are support to be short-living (despite it being 
rather obvious), while `close` explicitly mentions freeing *all* resources, so 
it is rather unexpected to keep something past `close`, even for short term. 
NB: `StringReader` applies the very same behavior, too (using `s` and `str` 
variables), that's where I copied the code from originally. It is not a big 
problem for us to have two variables, neither that the name of the variable is 
`source` (in fact, I do like `source` even more than `cs`, but this is just my 
personal preference). To sum up, I really dislike the idea to keep the 
reference for any longer than essentially needed. If it's just about the name 
of the variable, I could simply switch them if you prefer that.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21371#discussion_r1790631189

Reply via email to