TNG / ArchUnit

A Java architecture test library, to specify and assert architecture rules in plain Java
http://archunit.org
Apache License 2.0
3.25k stars 299 forks source link

Improve performance for transitive dependency checks #1381

Open To6i opened 1 week ago

To6i commented 1 week ago

TransitiveDependencyCondition internally calls contains() recursively on the collection of all objects to be tested. If this collection is a large list and there are enough recursive calls to getDirectDependencyTargetsOutsideOfAnalyzedClasses() this results in a heavy performance impact. On a reasonable large project a single test using that condition may take minutes to complete.

Here is a 30 seconds FlameGraph taken while an transitive check was running for > 2 minutes:

FlameGraph_30s

Based on the samples, the CPU hangs in this filter lamdba for > 86% of the time:

So, converting the given list to a Set with much better contains() performance fixes this issue.