Uploaded image for project: 'ODF Toolkit'
  1. ODF Toolkit
  2. ODFTOOLKIT-426

PERFORMANCE: simple Document.getCopyStyleList improvements to reduce String allocation, hashing, etc.

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 0.6.2-incubating
    • simple api
    • 0.8.2-incubating-SNAPSHOT, jdk1.8.0_77, win7

    Description

      org.odftoolkit.simple
      Document.getCopyStyleList
      is a top hotspot in a (NetBeans) sampled profiling run of test_1 of
      https://issues.apache.org/jira/secure/attachment/12795379/odftoolkit-performance-test.zip

      When a sheet is copied from one document to another, simple.Document also merges metadata such as styles. For each style it iterates over every cell with that style. The current code can be improved by reusing constructed strings (also reducing garbage collection), removing unnecessary hash table lookups, etc.

      After these changes, Document.getCopyStyleList takes about 1/16th the original time in the profiled run.

      (This is surprising. Maybe it enables some optimizations that eliminate String creation in an inner loop in common cases.)

      (The gain is not due to an error of omission: The template.ods source file used in this performance test is a spreadsheet with styled cells. The differences between the ods xml files of the result spreadsheet produced before these patches are applied, and the ods xml files of the result spreadsheet produced after these patches are applied, are only in times and in random strings appended to style names. So these changes did not significantly change the result spreadsheet.)

      Attachments

        1. result-ods-xml-before-vs-after-patches_diff.zip
          38 kB
          Nimarukan
        2. Issue-426-patches.zip
          5 kB
          Nimarukan

        Issue Links

          Activity

            People

              svanteschubert Svante Schubert
              nimarukan Nimarukan
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: