[
https://issues.apache.org/jira/browse/FELIX-4819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Philippe Marschall updated FELIX-4819:
--
Attachment: ResolverImpl.java.patch
Patch that fixes the issue.
The patch replaces the following pattern:
{code}
if (set.contains(object)) {
return;
}
set.add(object);
{code}
with this one:
{code}
if (!set.add(object)) {
return;
}
{code}
in order to minimize the hash lookups.
Use Set instead of List for cycle detection
---
Key: FELIX-4819
URL: https://issues.apache.org/jira/browse/FELIX-4819
Project: Felix
Issue Type: Improvement
Components: Resolver
Reporter: Philippe Marschall
Attachments: ResolverImpl.java.patch
We did some profiling of the Felix resolver in our application and 16% were
spent in {{ArrayList#indexOf}} called by ArrayList#contains}}. It seems
that {{ResolverImpl}} uses {{java.util.ArrayList}} for data structures on
which it only calls {{#add}} and {{#contains}} with the latter being O(n). A
{{java.util.HashSet}} is the appropriate data structure for such this use
case.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)