On Mar 14, 2017, at 3:02 PM, Hans Boehm <hbo...@google.com> wrote:
> 
> If runFinalization() waits unconditionally for the other thread to complete, 
> then I think it would be great to add a warning. Conversely, if it times out 
> quickly enough to consider it non-blocking, that's useful information, too.
> 

Block indefinitely in the current implementation.  No time out.

Do you mind filing a JBS issue for such a warning?

> The fact that finalizers run in a new thread is also important, but I think 
> already follows from JLS 12.6.
> 

Hmm… I have to check it.

Mandy

> On Tue, Mar 14, 2017 at 2:54 PM, Mandy Chung <mandy.ch...@oracle.com 
> <mailto:mandy.ch...@oracle.com>> wrote:
> Since nothing is proposed to be removed in this patch, Object.finalize and 
> runFinalization will stay.
> 
> runFinalization is a hint.  The spec states that it suggests the JVM expend 
> effort toward running the finalizer methods of objects pending for 
> finalization.   It’s best effort and no guarantee.   The current 
> implementation of runFinalization invokes the finalizers in a new thread so 
> that it provides some kind of insulation but it would still be prone to 
> deadlock.  We could add a note about such warning.
> 
> Mandy
> 
> 
>> On Mar 14, 2017, at 2:02 PM, Hans Boehm <hbo...@google.com 
>> <mailto:hbo...@google.com>> wrote:
>> 
>> If we're going to keep runFinalization(), could we please document clearly 
>> whether it may block indefinitely or not? It seems to me that the answer to 
>> this question fundamentally determines the usage model. If not, I can call 
>> runFinalization() (and possibly gc()) from a library when I'm out of 
>> resources managed by finalizers. But runFinalization() is really only a hint 
>> that needs to be careful about blocking. If yes, then runFinalization() is 
>> likely to deadlock if I call it from any setting in which I hold a lock, and 
>> this kind of usage is unsafe, unless I run it in a separate thread, and 
>> refuse to wait for it indefinitely. I can't decide whether the current 
>> javadoc says "yes" or "no", making any usage suspect. "No" is probably a 
>> more useful answer, but any clear answer seems like it would be a major 
>> improvement.
>> 
>> On Tue, Mar 14, 2017 at 1:13 PM, Mandy Chung <mandy.ch...@oracle.com 
>> <mailto:mandy.ch...@oracle.com>> wrote:
>> > On Mar 14, 2017, at 10:37 AM, Stuart Marks <stuart.ma...@oracle.com 
>> > <mailto:stuart.ma...@oracle.com>> wrote:
>> >
>> > Tagir Valeev asked on Twitter whether System.runFinalization() and 
>> > Runtime.runFinalization() should also be deprecated. The obvious answer is 
>> > "yes" since we're deprecating finalization, but maybe it's not so obvious.
>> >
>> > One view is that we're not deprecating the entire finalization mechanism, 
>> > we're simply deprecating Object.finalize() and its overrides. The point of 
>> > doing this is to encourage code to migrate away from these methods. Code 
>> > that calls runFinalization() can't rely on it having many semantics, so 
>> > such calls are harmless. (Well, mostly harmless.) Encouraging migration 
>> > away from runFinalization() thus isn't necessary.
>> >
>> 
>> I agree deprecating runFinalization() isn’t necessary in this proposed 
>> patch.  Deprecating Object.finalize would encourage existing code to migrate 
>> away from finalizers as well as discourage new code to add any new finalizer.
>> 
>> > Another point is that "finalization" in a generic sense can be applied to 
>> > reference processing, not just calls to the finalize() method.
>> 
>> Hmm..  I am not sure what this exactly means here.  But there would be lot 
>> to figure out what happens next and what baby steps to take.
>> 
>> > Offhand I'm not sure what runFinalization() does today, but perhaps in the 
>> > future it could be modified to have stronger semantics regarding reference 
>> > processing -- which is one of the big unresolved issues in this area.
>> >
>> 
>> I don’t know about this.  Certainly it would be something to look into.
>> 
>> Mandy
>> 
>> > What do you think?
>> >
>> > s'marks
>> >
>> > On 3/10/17 1:40 PM, Roger Riggs wrote:
>> >> Finalizers are inherently problematic and their use can lead to 
>> >> performance issues,
>> >> deadlocks, hangs, and other problematic behavior.
>> >>
>> >> The problems have been accumulating for many years and the first step to
>> >> deprecate Object.finalize and the overrides in the JDK to communicate the
>> >> issues, recommend alternatives, and motivate changes where finalization is
>> >> currently used.
>> >>
>> >> The behavior of finalization nor any uses of finalize are not modified by 
>> >> this
>> >> change.
>> >> Most of the changes are to suppress compilation warnings within the JDK.
>> >>
>> >> Please review and comment.
>> >>
>> >> Webrev:
>> >> http://cr.openjdk.java.net/~rriggs/webrev-finalize-deprecate-8165641/ 
>> >> <http://cr.openjdk.java.net/~rriggs/webrev-finalize-deprecate-8165641/>
>> >>
>> >> Issue:
>> >>   https://bugs.openjdk.java.net/browse/JDK-8165641 
>> >> <https://bugs.openjdk.java.net/browse/JDK-8165641>
>> >>
>> >> Thanks, Roger
>> >>
>> >>
>> 
>> 
> 
> 

Reply via email to