Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8235629

Remove unnecessary calls to Thread::current

    XMLWordPrintable

    Details

    • Type: Enhancement
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: 14
    • Fix Version/s: 14
    • Component/s: hotspot
    • Labels:
    • Subcomponent:
    • Resolved In Build:
      b27

      Backports

        Description

        Thread::current is supposed to be quick, but we still call it TONS of times. E.g., when running with "java -version", on my machine it executes about 116,000,000 instructions (according to linux "perf stat -r 100 java -version". Thread::current() is called about 130000 times (see patch below), which leaves about less than 1000 instructions between each call to Thread::current(). So even if each call of Thread::current() takes just 10 instructions, that would add up to 1% of total instructions.

        Many of these calls are unnecessary. The calls below are supposed to be used for debug builds only, but they are unintentionally included into the product build.

        http://hg.openjdk.java.net/jdk/jdk/file/66211c44e126/src/hotspot/share/runtime/mutex.cpp#l159
        void Mutex::unlock() {
          assert_owner(Thread::current());
          set_owner(NULL);
          _lock.unlock();
        }

        void Monitor::notify() {
          assert_owner(Thread::current());
          _lock.notify();
        }

        void Monitor::notify_all() {
          assert_owner(Thread::current());
          _lock.notify_all();
        }

        Removing these from the product build reduces the calls by about 15,000 times. On my machine 'java -version' is about 0.6% faster.

        Before: 0.0420053188 sec
        After: 0.0417649239 sec
        ~ 99.42770374%

        -----------
        The patch for counting Thread:current() calls is in the attachment. Actual numbers variy depending on the number of compiler threads, etc.

        Before:
        $ bin/java -version
        java version "14-internal" 2020-03-17
        Java(TM) SE Runtime Environment (build 14-internal+0-adhoc.iklam.open)
        Java HotSpot(TM) 64-Bit Server VM (build 14-internal+0-adhoc.iklam.open, mixed mode, sharing)
        Thread::current() calls = 133886

        After:
        $ bin/java -version
        java version "14-internal" 2020-03-17
        Java(TM) SE Runtime Environment (build 14-internal+0-adhoc.iklam.open)
        Java HotSpot(TM) 64-Bit Server VM (build 14-internal+0-adhoc.iklam.open, mixed mode, sharing)
        Thread::current() calls = 118860


          Attachments

            Issue Links

              Activity

                People

                Assignee:
                iklam Ioi Lam
                Reporter:
                iklam Ioi Lam
                Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved: