RFR : JDK-8170299 - Debugger does not stop inside the low memory notifications code

Daniel D. Daugherty daniel.daugherty at oracle.com
Thu Aug 30 18:12:49 UTC 2018


Adding hotspot-runtime-dev at ... to this thread...

More below...


On 8/28/18 3:37 PM, mandy chung wrote:
>
>
> On 8/24/18 7:06 AM, Daniel Fuchs wrote:
>> Hi Harsha,
>>
>> On 23/08/2018 17:35, Daniel Fuchs wrote:
>>> So all in all - maybe this is worth fixing but better early
>>> in the release than late. I also wonder whether such a behavior
>>> change should deserve a release note (or a switch to revert
>>> to the old behavior - though I do hope that isn't necessary).
>>
>> On second thought - it occurred to me that what you are proposing
>> to do in the platform could very well be implemented in the
>> client (listener) code instead.
>>
>> The workaround would be simple:
>>
>> -------------------------------
>> package com.foo.monitoring;
>>
>> import javax.management.*;
>>
>> final class PlatformMXBeaNotificationListener implements
>>       NotificationListener {
>>
>>     private final NotoificationListener delegate;
>>
>>     PlatformMXBeaNotificationListener(NotoificationListener delegate) {
>>     this.delegate = delegate;
>>     }
>>
>>     public void handleNotification(Notification notification,
>>                                    Object handback) {
>>          executor.execute(() ->
>>                delegate.handleNotification(notification, handback));
>>     }
>>
>>     private static final Executor executor
>>           = Executors.newSingleTreadExecutor();
>> }
>> --------------------------------
>>
>> This way the threading would remain in control of the
>> client application, and the debugger would be able to
>> step in the delegate's handleNotification(...) method?
>>
>> Given the unquantifiable risk posed by changing the threading
>> model in the platform, then maybe leaving the current
>> implementation as is and documenting that workaround
>> leaving it up to the client code to decide whether to use
>> that or not, would be the better idea?
>>
>
> I agree that this is a behavioral change but I suspect this is not 
> high compatibility risk
> though (no data though).   I understand David's concern that this is 
> to fix a debugger
> issue and we should investigate other alternatives to minimize the 
> compatibility risk.
>
> The other approach David has proposed is to investigate if we can make 
> the service thread
> not hidden.   The threading model in the notification listener 
> invocation remains unchanged.
> In addition, the VM service thread also handles DCMD and JVM TI 
> callbacks.  I don't know
> if there are public API to register DCMD callback.  If so, it will 
> enable debugging
> user-defined DCMD callback for free then.  The notion of hidden VM 
> JavaThread was added
> to avoid a compiler thread and other system thread being suspended and 
> resumed
> (see JDK-4529296).   So we should be careful and look into past issues 
> to make the
> VM thread visible to debugger.  It may be a feasible solution.
>
> In any case, it would be useful to clarify the spec w.r.t. the 
> synchronization and threads
> invoking the listeners and users should prepare the listeners may be 
> invoked
> asynchronously in parallel.
>
> Mandy

More work is being moved from the VMThread to the ServiceThread. I don't
think making the ServiceThread visible (and thus suspend-able) is going
to be viable.

JDK-8206424 Use ConcurrentHashTable for ProtectionDomainTable
https://bugs.openjdk.java.net/browse/JDK-8206424

JDK-8206423 Use ConcurrentHashTable for ResolvedMethodTable
https://bugs.openjdk.java.net/browse/JDK-8206423

There may be more work in progress for off loading the VMThread...

Dan


More information about the serviceability-dev mailing list