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

Bug in calculation of code cache sweeping interval

    XMLWordPrintable

    Details

    • Subcomponent:
    • Introduced In Build:
      b117
    • Introduced In Version:
      8
    • Resolved In Build:
      b01
    • CPU:
      generic
    • OS:
      generic

      Backports

        Description

        The calculation of wait_until_next_sweep in NMethodSweeper::possibly_sweep() {} has a signed to unsigned conversion bug. The calculation was done as follows:

        double wait_until_next_sweep = (ReservedCodeCacheSize / (16 * M)) - time_since_last_sweep - CodeCache::reverse_free_ratio();

        Since the type of ReservedCodeCacheSize (uintx) has a higher rank than time_since_last_sleep (int) and time_since_last_sweep can be larger than (ReservedCodeCacheSize / (16 * M)) there is an underflow. Consequently, wait_until_next_sweep is assigned a high value, which disables the intended periodic code cache sweeps. The current version will run the sweeper only if the code cache is full or the accumulated size of all nmethods that changed
        their state size the last sweep is larger than 1% of the ReservedCodeCacheSize.

          Attachments

            Issue Links

              Activity

                People

                Assignee:
                anoll Albert Noll (Inactive)
                Reporter:
                anoll Albert Noll (Inactive)
                Votes:
                0 Vote for this issue
                Watchers:
                6 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved: