This is blocker for using JasperReports in JBoss and other containers which uses hot redeploy. So I have changed the severity to critical.
Please, use ThreadLocal sparingly and with a big care. Take a look at http://xmedeko.blogspot.com/2010/02/java-web-container-hunting-redeploy.html. This bug is caused particularly by static ThreadLocal inner class, see http://crazybob.org/2006/02/threadlocal-memory-leak.html.
This bug can be easily solved (I'll post the fix later).
But I mean, the ThreadLocal in the JRFontUtil has a functionality just to limit number of WARN logs - in my opinion, it would be best to remove the ThreadLocal from this class completely. Why?
1. It does not improve any functionality, just causes problems
2. Some web servers, like Tomcat, use thread pool. So, if you do not clean the ThreadLocal after the request finishes, then the HashSet with missing fonts will occupy the memory forever (until the web server shut downs). E.g. if the pool has 300 threads and the JRFontUtil.threadMissingFontsCache occupy 1kB, then after some time the 300kB of memory is wasted.