While profiling, it became very clear that a great deal of allocations are related to the slots in a DIComplex element. Many Maybe's are allocated (even though it's a value class, it's in an array, so they must be allocated). Additionally, many int arrays are allocated for saving the state of a dicomplex. It's unclear how much of a performance impact these allocations are causing, but if these arrays are very sparse, switching to something like a Map or some other data structure that is efficient for sparse arrays should decrease the number of allocations.
We may need to due some performance testing to see if these allocations are even a problem, but they are certainly up there in some of the most numerous allocations.