I'm trying to figure out what piece of the puzzle I'm missing. I converted the script to java, using apache's RandomStringUtils.randomAscii, and I get:
With StringBuilder: 2.61 seconds With String Concat: 3.03 seconds
I have to assume there's another loop running these, but I'm not seeing it. Each dictionary has 1 million elements at the end.
I just implemented it inside a junit test, here's the class:
Turns out java performance isn't bad at all.
EDIT:
I'm a dumbass, was converting nanos to full seconds. Post has been edited.