@@ -817,11 +817,13 @@ public Felix getFelix(final File resourceRootDir, Map<String, Object> config) th
817817 extend (config , "felix.service.urlhandlers" , null , false );
818818 extend (config , "felix.startlevel.bundle" , null , false );
819819
820- int processors = Runtime .getRuntime ().availableProcessors ();
821- String parallelism = Math .max (4 , processors * 2 ) + "" ; // Use more threads
822- extend (config , "felix.resolver.parallelism" , parallelism , false );
823- extend (config , "felix.resolver.parallel" , "true" , false ); // Enable parallel resolution
824- extend (config , "felix.systembundle.activators.start.parallelism" , parallelism , false );
820+ // Felix bundle resolution parallelism: enable parallel resolution with virtual threads.
821+ // With virtual threads (Java 21+), parallelism is now beneficial for dependency graph traversal.
822+ // Default: Math.min(CPU cores, 8) to balance parallelism without excessive lock contention.
823+ // Override via -Dfelix.resolver.parallelism=N
824+ int parallelism = Math .min (Math .max (1 , Runtime .getRuntime ().availableProcessors ()), 8 );
825+ extend (config , "felix.resolver.parallelism" , "" + parallelism , false );
826+ extend (config , "felix.resolver.parallel" , "true" , false );
825827
826828 // Skip waiting for service events to be delivered
827829 extend (config , "felix.service.timeout" , null , false );
0 commit comments