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

ParOld can miss compacting of regions if each GC threads does not get a drain-stack task.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 7
    • hotspot
    • None
    • gc
    • generic
    • generic

      In the compaction phase of UseParallelOldGC regions may not be processed if
      each GC threads does not execute a DrainStacksCompactionTask.
      I tried to provoke this bug by putting a sleep into get_task()
      after the wait() for worker 0. I release the monitor before
      the sleep. I expected this to delay worker 0 long enough
      such that all the drain-tasks were taken and executed. That
      does seem to have haven't but the bug did not manifest itself.
      I think now that the task strealing will take care of regions
      that on the stack as long as those regions are stealable.
      In the current code base it looks like the local overflow
      stacks are not used. In taskqueue.hpp I find

      #define USE_RegionTaskQueueWithOverflow

      which would preclude the use of an overflow stack.
      I'll be investigating this a little more so won't close
      this yet but am lowering the priority.

            jmasa Jon Masamitsu (Inactive)
            jmasa Jon Masamitsu (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: