Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-9912

jcache.embedded.LimitExpiryPolicy creates a NPE to control the flow, the jcache.get() could be 10% faster.

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Done
    • Minor
    • 10.0.0.Beta1
    • 10.0.0.Alpha3, 9.4.5.Final, 9.4.6.Final
    • JCache
    • None
    • 1
    • Hide
      jcache.embedded.LimitExpiryPolicy creates a NPE to control the flow, the jcache.get() could be 10% faster.

      Instead of a NPE, a NULL check could be done.

      With NULL check the jcache.get() is 10% faster.
      Show
      jcache.embedded.LimitExpiryPolicy creates a NPE to control the flow, the jcache.get() could be 10% faster. Instead of a NPE, a NULL check could be done. With NULL check the jcache.get() is 10% faster.

    Description

      A jcache.get() call with expiry==eternal creates an unnecessary NPE in LimitExpiryPolicy, it's catched in Expiration.getExpiry(), and a NULL is returned. The LimitExpiryPolicy could return this NULL itself, so the NPE would not happen. In my test this NPE costs ca. 10% of a jcache.get() call (plus the garbage collection overhead). Infinispan is used through JCache interface.

      Details:
      org.infinispan.jcache.embedded.LimitExpiryFactory.LimitExpiryPolicy doesn't check the "duration" against null, so a NPE will be thrown.

      EternalExpiryPolicy returns NULL as getExpiryForAccess() and getExpiryForUpdate().

      It leads to NPE in LimitExpiryPolicy.getExpiryForAccess() and LimitExpiryPolicy.getExpiryForUpdate(). This NPE will be in Expiration.getExpiry() catched, and it's handled as it was NULL.

      The LimitExpiryPolicy.getExpiryForUpdate()/getExpiryForAccess() could make the "duration==null" check itself, and could return a NULL, so would not happen the "catch(NPE)

      { return null; }

      ", and so would it be faster.

      Attachment:
      SCCE.zip:
      small maven project with a unittest (it fails without the fix) and a "TestJCacheLimiterExpiryNpeControl" program to measure it with eg. VisualVM's sampling.

      VisualVM-Sampling.png:
      CPU Sampling with VisualVM.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              gpapai Gabor Papai (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: