The maxSize change you gave me's been working perfectly in our webapp running under Tomcat 5.5 on Linux. I set the max size and throttle the total simultaneous reports and we've run hundreds through a size-10 cache. We're now seeing something odd with the cache when the web-app's running on a Windows 2003 server. Java 1.5 (012), same Tomcat 5.5.23, JasperReports 1.3.3, same code of ours I run on Linux. When running under 2003, the contexts don't appear to be releasing the virtualizer / cache after we run the report. I do this sequence: Code: fill template Params Map, including a put(JRParameter.REPORT_VIRTUALIZER, virtualizer) JasperPrint prtRpt = JasperFillManager.fillReport( reportTemplate, templateParams, connection ); for( de : delivery-list ) { create exporter of appropriate type (CSV, HTML, PDF, TXT , whatever) exporter.setParameter( JRExporterParameter.JASPER_PRINT, prtRpt ); ... set exporter params exporter.exportReport(); } return status; And that works fine on Linux; all the reports share the same cache. On Windows, the first maxSize reports run normally. The maxSize+1 report and all succeeding ones return this error (maxSize == 10 in my app): The virtualizer is used by more contexts than its in-memory cache size 10 Apparently the context isn't being released when my local variable prtRpt goes out of scope, garbage collected, finalize(), or whatever signals the cache that the context isn't using it. On Windows only. Has anyone else heard of this issue? And is there a step I can add to explicitly release the cache from the context when I finish all my exports? Right now I'm working around it by created a JRFileVirtualizer() per report instead of a shared JRSwapFileVirtualizer(). But I'd like to understand why the context isn't being released (or releasing the cache), and I prefer using the shared swap-cache as it's less expensive long term and creates less temp files to clean up. Thanks! - Dave