[
https://issues.apache.org/jira/browse/LUCENE-8005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16215556#comment-16215556
]
Scott Somerville commented on LUCENE-8005:
------------------------------------------
Here's a quick code snippet:
{code:java}
Stopwatch sw = Stopwatch.createStarted();
for (int i = 0; i < 100_000_000; i++) {
Integer.class.getSimpleName();
}
System.out.println("getSimpleName took " + sw);
sw.reset();
sw.start();
for (int i = 0; i < 100_000_000; i++) {
Integer.class.getSuperclass();
}
System.out.println("getSuperclass took " + sw);
sw.reset();
sw.start();
Integer a = 42;
for (int i = 0; i < 100_000_000; i++) {
boolean b = a instanceof Number;
}
System.out.println("instanceof took " + sw);
{code}
Output:
{noformat}
getSimpleName took 9.810 s
getSuperclass took 5.454 ms
instanceof took 4.348 ms
{noformat}
> Avoid Reflection in UsageTrackingQueryCachingPolicy
> ---------------------------------------------------
>
> Key: LUCENE-8005
> URL: https://issues.apache.org/jira/browse/LUCENE-8005
> Project: Lucene - Core
> Issue Type: Improvement
> Reporter: Scott Somerville
> Attachments: LUCENE-8005.patch
>
>
> By profiling an Elasticsearch cluster, I found the private method
> UsageTrackingQueryCachingPolicy.isPointQuery to be quite expensive due to the
> clazz.getSimpleName() call.
> Here is an excerpt from hot_threads:
> {noformat}
> java.lang.Class.getEnclosingMethod0(Native Method)
> java.lang.Class.getEnclosingMethodInfo(Class.java:1072)
> java.lang.Class.getEnclosingClass(Class.java:1272)
> java.lang.Class.getSimpleBinaryName(Class.java:1443)
> java.lang.Class.getSimpleName(Class.java:1309)
>
> org.apache.lucene.search.UsageTrackingQueryCachingPolicy.isPointQuery(UsageTrackingQueryCachingPolicy.java:39)
>
> org.apache.lucene.search.UsageTrackingQueryCachingPolicy.isCostly(UsageTrackingQueryCachingPolicy.java:54)
>
> org.apache.lucene.search.UsageTrackingQueryCachingPolicy.minFrequencyToCache(UsageTrackingQueryCachingPolicy.java:121)
>
> org.apache.lucene.search.UsageTrackingQueryCachingPolicy.shouldCache(UsageTrackingQueryCachingPolicy.java:179)
>
> org.elasticsearch.index.shard.ElasticsearchQueryCachingPolicy.shouldCache(ElasticsearchQueryCachingPolicy.java:53)
>
> org.apache.lucene.search.LRUQueryCache$CachingWrapperWeight.bulkScorer(LRUQueryCache.java:806)
>
> org.elasticsearch.indices.IndicesQueryCache$CachingWeightWrapper.bulkScorer(IndicesQueryCache.java:168)
> org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:665)
> org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:472)
> org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:388)
> org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:108)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]