[
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]