Have a look here: https://github.com/unclebob/fitnesse

The test suite is quite large. I used VisualVM to monitor the test suite while running. I ran them several times but couldn't find any extreme consumptions.

You are right, I could simply add a new class to keep the TestClass Pool (even name it like this?) within it. So we don't have to change the current implementation but could offer the pool as an add-on. I see your point here, that this change affects quite a bit of code. I think we wouldn't break anything, as we only add features in very decent places, but I totally agree with you, and create a separated "Pool-Class" is absolutely fine with me.

About the withBefores(): As I mentioned before, IMHO this is a bug, but yes, the method somehow feels like a utility method. Probably, we should extract a component that performs the RunBefores/RunAfters nicely on the target and use this method only to delegate to that component. As this "complexifies" this change, I would also rather have the changes to take place in the new runner, just as you proposed. I will have some time tomorrow to change the code accordingly and hope to match your expectations. :-)

Oh and btw.: Thanks for the fresh discussion. I really think this helps to improve the runner and even JUnit. :-)