自从切换到JRE 6后,我的服务器的代码缓存使用量(非堆)会不断增长。我的应用程序会在运行时创建大量的类,但是这些类在GC过程中成功卸载。我可以在gc日志中看到这些类被卸载,并且permGen使用保持不变。我在我的代码中特意确保这些类在我使用完它们后被置为孤立状态,因此它们会从permGen正确地被垃圾回收。
然而,代码缓存仍然在增长。只有在切换到JRE 6之后,我才意识到代码缓存的存在。所以我的问题是:
- GC是否包括代码缓存?
- 什么可能导致代码缓存内存泄漏?
- JDK 6在这个领域中是否存在bug?