RFR: 8292201: serviceability/sa/ClhsdbThreadContext.java fails with "'Thread "Common-Cleaner"' missing from stdout/stderr" [v2]

Alex Menkov amenkov at openjdk.org
Thu Sep 1 22:08:43 UTC 2022


On Thu, 1 Sep 2022 21:12:08 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:

>> src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/debugger/DebuggerBase.java line 242:
>> 
>>> 240:   private boolean canUsePageCacheFor64bitRead(long address) {
>>> 241:     long pageMask = ~(pageSize - 1);
>>> 242:     if ((address & pageMask) != ((address + 4) & pageMask)) {
>> 
>> This looks a bit over-complicated.
>> Maybe something like
>> `    long pageMask = pageSize - 1;
>>     if ((address & pageMask) > (pageSize - 8)) {
>>       return false;
>>     }`
>
> I tinkered with this code quite a bit before I had something that both worked and I liked. I don't know that your approach is actually any simpler, and at the moment I still prefer mine, but that might just be because I'm more familiar with it. However, it does seem that there should be a more elegant way of doing this.

Your code works only for the exact case - address of 64bit value points to the last 32bit of the page.

My idea is to use more generic approach - check that the whole value is in the page, i.e. this is special case of more common

boolean canUsePageCacheForRead(long address, int bits) {
   long pageMask = pageSize - 1;
   return ((address & pageMask) <= (pageSize - bits/8));
}


But I have no strong objections, feel free to keep your version

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

PR: https://git.openjdk.org/jdk/pull/10090


More information about the serviceability-dev mailing list