You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/11/16 17:36:04 UTC
svn commit: r1639998 -
/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
Author: pderop
Date: Sun Nov 16 16:36:03 2014
New Revision: 1639998
URL: http://svn.apache.org/r1639998
Log:
Optimization: use a ConcurrentHashMap instead of a CopyOnWriteArrayList because CopyOnWrite list has a high cost when adding many
components in the same DependencyManager (DM benchmark may add thousands of Components to the same DependencyManager).
Modified:
felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java?rev=1639998&r1=1639997&r2=1639998&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager/src/org/apache/felix/dm/DependencyManager.java Sun Nov 16 16:36:03 2014
@@ -20,11 +20,12 @@ package org.apache.felix.dm;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.felix.dm.impl.AdapterServiceImpl;
import org.apache.felix.dm.impl.AspectServiceImpl;
@@ -73,7 +74,7 @@ public class DependencyManager {
private final BundleContext m_context;
private final Logger m_logger;
- private final List<Component> m_components = new CopyOnWriteArrayList<>();
+ private final ConcurrentHashMap<Component, Component> m_components = new ConcurrentHashMap<>();
// service registry cache
private static ServiceRegistryCache m_serviceRegistryCache;
@@ -171,7 +172,7 @@ public class DependencyManager {
* @param c the service to add
*/
public void add(Component c) {
- m_components.add(c);
+ m_components.put(c, c);
ComponentScheduler.instance().add(c);
}
@@ -560,7 +561,7 @@ public class DependencyManager {
* @return a list of components
*/
public List<Component> getComponents() {
- return m_components;
+ return Collections.list(m_components.elements());
}
/**
@@ -684,7 +685,7 @@ public class DependencyManager {
* Removes all components and their dependencies.
*/
public void clear() {
- for (Component component : m_components) {
+ for (Component component : m_components.keySet()) {
remove(component);
}
m_components.clear();