Ok, I guess that was my sleep tonight.
I discovered that instrumenting rt.jar for thread checking is actually blowing the default-sized heap, so I quickly wrote a
SoftHashMap that uses
SoftReferences the garbage collector is free to evict.
I also did some analysis on the caching of class and method annotations:
ThreadChecker Cache Info: Class cache 85499/13225, method cache 24748/111845 (hits/misses)
That means it definitely works, there’s no error. It works very well for classes (86%), probably because it is looking for the same classes very often (
Object, d’uh), but it’s working pretty badly for methods (18%).
I don’t know off hand how I can improve the latter. I could perhaps scan all methods when I have a class file open. I think I’ll look at my second suggestion, temporary directories, first, though.