The optimization covers the following issues:
- java.nio.charset.CharsetDecoder and java.nio.charset.CharsetEncoder
Streaming decoding/encoding was removed. Analysis of API hotspots for
Dacapo shows that CharsetDecoder is frequently used almost in all
benchmark, especially in chart. We already discussed advantages of
streaming decoding but the fix shows significant performance
improvement on average for all Dacapo benchmarks. For instance, boost
for chart benchmark is about 16%. Paulex, you recently worked in
nio_char module and if I correctly remember you introduce streaming
operations, so could you please review the changes and let me know?
Since streaming operation was removed, tests have been slightly
modified as well (previous version of tests fails on RI).
- java.io.BufferedReader
readLine() method was slightly modified. Additional check whether some
characters available in cached buffer was added prior to main cycle.
- java.io.InputStreamReader
Cached char buffer was removed, read() , read(char[], int, int)
methods were rewritten. Current implementation of read(char[], int,
int) uses several invocation of System.arraycopy. Proposed solution
wraps char[] arguments within char buffer and therefore doesn't use
arraycopy. Decoding operation is also produced inside the method, so
fillBuf() has been removed

Thoughts? Comments?

Thanks,
Vladimir.

On 10/26/06, Vladimir Strigun (JIRA) <[EMAIL PROTECTED]> wrote:
[classlib][performance] performance improvement for luni and nio_char modules
-----------------------------------------------------------------------------

                Key: HARMONY-1980
                URL: http://issues.apache.org/jira/browse/HARMONY-1980
            Project: Harmony
         Issue Type: Improvement
         Components: Classlib
           Reporter: Vladimir Strigun
        Attachments: Harmony-1980.diff

I've analyzed API frequently used in all Dacapo[1] benchmarks and found several 
places in luni and nio_char modules that can be improved. Suggested fix gives 
about 10-15% boost on average for Dacapo executed on DRLVM. I'll post more 
details to dev list.
Attached fix contains modifications for the following classes: 
java.io.BufferedReader, java.io.InputStreamReader, 
java.nio.charset.CharsetDecoder and java.nio.charset.CharsetEncoder.

Please have a look to the results of Dacapo execution (values are in millisec, 
so the less the better):

Small workload

       OrigBuild   Patched
bloat   996,078 1024,85
chart   1240,777        1068,112
fop     250,433 232,957
hsqldb  348,942 361,139
jython  831,143 824,775
lusearch        1854,95 1870,969
luindex 339,45  231,314
pmd     29,704  23,638


default workload
       OrigBuild   Patched
bloat   168733,562      175493,467
chart   31651,792       25681,751
fop     2546,289        2512,045
hsqldb  22873,608       13555,515
jython  128207,303      92863,28
lusearch        29425,991       30064,153
luindex 17825,795       18083,898
pmd     44548,724       40225,694



[1] http://dacapobench.sourceforge.net


--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira



Reply via email to