I have been meaning to do some scalability tests on Structure101 for some time now but something always seems to get in the way. Step in the end of the last working day before Christmas. Just fire some code at it, and let’s see what happens!
I have a new iMac, 2.7 GHz i5 with 12 GB of Ram running Lion, I love it! But if you’ve got a big codebase, yours is certainly bigger and better.
I load a version of Android, Eclipse and JBoss. Without paying too much attention, Structure101 took approximately 3 mins to load:
- ~78,000 classes
- ~6,600,000 lines of code
- using 1.7 GB ram
I add Sonar, Spring and Netbeans.
Paid attention this time as it loaded:
- in 4 mins 17 secs
- 124,500 classes
- 10,600,000 lines of code
- using 2.5 GB ram
Finally, let’s see what it can really do! I add Activemq, Ant, Camel, Glassfish, Hibernate and the JDK. This time:
- 7:30 to load
- 176,000 classes
- 15,800,000 lines of code
- 3.7 GB ram
- 119,000 architecture violations (ouch!)
After all 3 tests, the Structure101 UI was perfectly responsive. All tests were run in Detailed mode which keeps all dependencies right down to method level dependencies.
Other processes running simultaneously: Activity Monitor (obviously), Securitas (VPN software), Finder, iTerm2, and Spotify (blasting out some James Brown).
It seems pretty clear that no matter how big your codebase, Structure101 and Restructure101, are more than ready.
There’s good in every codebase, no matter how big, old and messy it might be. So what are you waiting for?
I neglected to mention the all important JVM and settings.
Naturally on a 64-bit machine I was using a 64-bit JVM, version 18.104.22.168. By default Structure101, allocates 1GB of RAM, so from the start I set my memory allocation to 8GB, using only half that in the end for 15.8m lines of code.
On Mac you do this by changing the -Xmx setting in your Info.plist file in /Applications/Structure101 for Java.app/Contents. On Windows edit your structure101_v3.exe.ini in your install-dir, and on Linux you can change the default -Xmx setting in your startup script.
On a 32 bit machine most JVMs are limited to just over a gig, but you can always use JRockit to get around this limitation. However, in this day and age, if you have a codebase that needs more than a gig of RAM you really should get yourself a 64-bit machine. I can’t imagine a better investment, other than Structure101 of course! 🙂
As it uses the same underlying data structures, Restructure101 will have very similar scalability and memory requirements.