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

cleanup debug agent removeThread() api

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Fixed
    • P4
    • 20
    • 20
    • core-svc
    • None
    • b21

    Description

      The implementation of removeThread() is currently:

      static void
      removeThread(JNIEnv *env, ThreadList *list, jthread thread)
      {
          ThreadNode *node;

          node = findThread(list, thread);
          if (node != NULL) {
              removeNode(list, node);
              clearThread(env, node);
          }
      }

      However, currently all callers already have the ThreadNode*, so they end up calling like the following:

                  removeThread(env, list, node->thread);

      So we go from a ThreadNode* to a jthread, only to do a findThread() to get the ThreadNode* again. Also, the list is stored in the ThreadNode. removeThread() can instead be implemented as:

      static void
      removeThread(JNIEnv *env, ThreadNode *node)
      {
        JDI_ASSERT(node != NULL);
        removeNode(node->list, node);
        clearThread(env, node);
      }

      This is faster, although not by as much as you might think. TLS is used to map a jthread to a ThreadNode*, so the findThread() call is actually already pretty fast. The exception is when dealing with the otherThreads list. These threads have not yet been started, so TLS cannot be used, but it is rare for threads to appear on this list. Still, this is a good cleanup to do, and should be a bit faster.

      This cleanup was initially implemented as part of the work for JDK-8295376, but is being split out.

      Attachments

        Issue Links

          Activity

            People

              cjplummer Chris Plummer
              cjplummer Chris Plummer
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: