[jira] [Updated] (FELIX-4819) Use Set instead of List for cycle detection

2015-03-02 Thread Philippe Marschall (JIRA)

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


[jira] [Updated] (FELIX-4819) Use Set instead of List for cycle detection

2015-03-02 Thread Philippe Marschall (JIRA)

 [ 
https://issues.apache.org/jira/browse/FELIX-4819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Philippe Marschall updated FELIX-4819:
--
Labels: patch  (was: )

 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
  Labels: patch
 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)