[ 
https://issues.apache.org/jira/browse/LUCENE-7268?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15266228#comment-15266228
 ] 

Adrien Grand commented on LUCENE-7268:
--------------------------------------

I did some testing and the difference seems to be due to how our impl in 
ArrayUtil tries to save memory: it uses a hard-coded {{array.length/64}} as the 
maximum size of the temporary Object[] that it may use for merging. If it needs 
less memory than that, it will use this temporary Object[], but for larger 
merges it will switch to an in-place merge routine that is much slower (the 
same logic that InPlaceMergeSorter uses). I get the following build times with 
the patch:

|| Arrays.sort | 222ms |
|| ArrayUtil.timSort - max temp storage = array.length | 262ms |
|| ArrayUtil.timSort - max temp storage = array.length/64 (like in master) | 
383ms |
|| ArrayUtil.timSort - max temp storage = 0 | 444ms |


> Remove ArrayUtil.timSort?
> -------------------------
>
>                 Key: LUCENE-7268
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7268
>             Project: Lucene - Core
>          Issue Type: Improvement
>            Reporter: Robert Muir
>         Attachments: LUCENE-7268_mods.patch
>
>
> Is there some workload where our timSort is better than the JDK one? Should 
> we just remove ours if its slower?
> Not that its a great test, but i switched Polygon2D edge sorting (just the 
> one where it says "sort the edges then build a balanced tree from them") from 
> Arrays.sort to ArrayUtil.timSort and was surprised when performance was much 
> slower for an enormous polygon 
> (http://people.apache.org/~mikemccand/geobench/cleveland.poly.txt.gz)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to