RFR : JDK-8170299 - Debugger does not stop inside the low memory notifications code
mandy chung
mandy.chung at oracle.com
Tue Aug 28 19:37:48 UTC 2018
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20180828/1ee1ed26/attachment-0001.html>
More information about the serviceability-dev
mailing list