[ https://issues.apache.org/jira/browse/SOLR-14586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17142384#comment-17142384 ]
Megan Carey commented on SOLR-14586: ------------------------------------ Admittedly, I was not aware that Java lambda functions were a poor-performance option, so thanks for bringing that to my attention [~noble.paul]. I am curious why we're using map.computeIfAbsent with lambda function when in most cases we are not using the key to compute the value? >From what I understand, map.computeIfAbsent(key, key -> value) is meant to be >used when the value is computed from the key. However, if the value we are >"computing" is just a new HashMap, ArrayList, etc., why don't we just use >map.putIfAbsent? Apologies if I'm missing something here. > replace the second function parameter in computeIfAbsent with static vars > ------------------------------------------------------------------------- > > Key: SOLR-14586 > URL: https://issues.apache.org/jira/browse/SOLR-14586 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Reporter: Noble Paul > Assignee: Noble Paul > Priority: Minor > Time Spent: 10m > Remaining Estimate: 0h > > people misunderstand lambdas > let's look at a very innocuous looking piece of code > {code:java} > mapObject.computeIfAbsent(key, o -> new HashMap<>()); > {code} > vs. > {code:java} > mapObject.computeIfAbsent(key, Utils.NEW_HASHMAP_FUN) > {code} > > The first code fragment is executed as following > {code:java} > s.computeIfAbsent(key, new Function() { > @Override > public Object apply(String key) { > return new HashMap<>(); > } > } > {code} > So, there are two problems with this > * A new anonymous inner class is created for that lambda. This one extra > class becomes a part of your binary > * a new instance of that class is created everytime the > {{computeIfAbsent()}} method is invoked, irrespective of whether the value is > absent for that key or not. Now imagine that method getting called millions > of times and creating millions of such objects for no reason > OTOH > when I use {{Utils.NEW_HASHMAP_FUN}} > * Only a single anonymous class is created for the entire codebase > * Only single instance of that object is created in the VM > Ideally, we should go all over the codebase and remove such lambdas -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org