On Fri, 14 May 2021 04:45:36 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

> Overall it looks good. Some minor suggestions, most of which can be ignored 
> if you wish.

Thanks for the review. I made some of the changes, but not all of them.


> Is there a reason these tests were not placed under 
> test/jdk/java/lang/management?

These tests are for stressing particular HotSpot implementation pieces that are 
used
by the M&M APIs. In particular, they are stressing the use of ThreadsListHandles
in both the safepoint and non-safepoint code paths traveled by getThreadInfo():


                // maxDepth == 0 requires no safepoint so alternate.
                int maxDepth = ((count % 1) == 1) ? Integer.MAX_VALUE : 0;
                info = mbean.getThreadInfo(id, maxDepth);
                if (info == null) {
                    // the contender has exited
                    break;
                }
                name = info.getLockOwnerName();


And we're stressing getLockOwnerName() because we had a non-reproducible
bug that crashed in that particular function after the getThreadInfo() call.

So I think this stress test (along with others that I've written in this 
family) belong
in the test/hotspot collection of tests.

> test/hotspot/jtreg/serviceability/monitoring/ThreadInfo/getLockOwnerName/getLockOwnerName.java
>  line 70:
> 
>> 68: //
>> 69: 
>> 70: public class getLockOwnerName {
> 
> Shouldn't this be called GetLockOwnerName? We don't usually use lower case 
> for a class name.

Looks like I did that because the API is called:
ThreadInfo.getLockOwnerName()
Will fix the filenames and the classname.

> test/hotspot/jtreg/serviceability/monitoring/ThreadInfo/getLockOwnerName/getLockOwnerName.java
>  line 150:
> 
>> 148:         System.err.println("where:");
>> 149:         System.err.println("    -p       ::= print debug info");
>> 150:         System.err.println("    time_max ::= max looping time in 
>> seconds");
> 
> `::=` doesn't seem to be a convention we use in help output other than in the 
> other recent tests you've added.

It's a grammar notational style from my compiler theory days.
I've used '::=' and ':=' for years. What would you like it changed to?
Or can I just leave it and try to use '-' in the future?

> test/hotspot/jtreg/serviceability/monitoring/ThreadInfo/getLockOwnerName/getLockOwnerName.java
>  line 324:
> 
>> 322: 
>> 323:         //
>> 324:         // Launch the blocker thread:
> 
> The comment says "Launch the blocker thread", but this thread is already 
> launched. Maybe drop "Launch" in favor of "Run", or just say "The block 
> thread". Same comment for the other two threads.

Fixed.

> test/hotspot/jtreg/serviceability/monitoring/ThreadInfo/getLockOwnerName/getLockOwnerName.java
>  line 329:
> 
>> 327:         // - releases threadLock
>> 328:         //
>> 329:         if (getName().equals("blocker")) {
> 
> Bit of a nit here, but is there a reason not to just create separate Thread 
> subclasses for each of the 3 types of threads you are handling here? Or just 
> make these each separate static methods of the main class and use the 
> instantiate the Thread class with a lambda.

This new test is a variation of a 20 year old test that I recently ported to 
JVM/TI
and integrated. 20 years ago, it was much simpler to write the test this way.
I could create a separate Thread subclass for each "role", but I'd rather not
do that since it will no longer be easy to compare this test to its siblings.

As for lambdas, I know absolutely zero about writing lambda code.

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

PR: https://git.openjdk.java.net/jdk/pull/3478

Reply via email to