Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-1370

MarkupCache can "leak" memory

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 1.3.1
    • 1.3.2
    • wicket
    • None

    Description

      Currently markup cache uses a cache without any capacity upper bound :| normally this would be ok, holding markup of an entire application doesnt require THAT much memory. However, suppose we have Index page with markup Index.html. the page is requested with local en_us and we cache contents of index.html in the cache. now Index is requested with locale en_gb and we cache it AGAIN. Now we have two entries in the cache caching the exact same thing. the more locales users request (we pull the locale from the user's browser) the more copies of the same thing we cache.

      Thomas Singer reported his application running out of memory, attached memory snapshot contained a MarkupCache instance of over 48MB retained size (the internal map had allocated 4096 keys). He has an application with about 64 pages, and they only support one locale. When I browsed the snapshot I noticed a lot of different locales in the markup cache keys....

      An ideal solution would be to have two caches. One for [container.class,locale,style,variation]>[resource.name] lookup, and the other for [resource.name]>[resource.contents] lookup.

      A suboptimal solution would be to place an upper bound on the cache. See attached patch which contains a 1000 item lru cache. if looks ok we can roll it in as a solution for 1.3.2 branch - since it doesnt require any interfaces breakages.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            jcompagner Johan Compagner
            ivaynberg Igor Vaynberg
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment