各位好, 最近用Nutz的DAO部分写一个应用, 发现一个问题,请各位指教。 我用urlclassloader 装载了一个类,此类中调用了nutz的相关方法, 当此类更新的时候我用重新new了一个urlclassloader来装载这样就有一个问题, 看FastClassFatory中对model的classloader进行了缓存, 导致旧的urlclassloader一直不能被GC,如果频繁更新的时候,就会出现Perm Space越来越大, 另外发现model类自动生成的$$FASTCLASS也不会被GC , 有什么解决办法吗?
10 回复
@wendal 你好, 昨天已经使用FastClassFactory.setUseCache(false); 发现确实缓存不存在了, 但是还有一个问题是MODEL$$FASTCLASS也是用旧有的classloader加载的,每次new一个新的urlclassloader之后, jvm就会新load一个MODEL$$FASTCLASS,而这个class一直存在,导致这个class和它使用的旧的classloader也一直不能被gc, 仍然会出现Perm Space越来越大的问题, 这这个model$$fastclass如何释放呢?
找到原因了, 是由于EntityHolder中对model类的映射做了缓存, 由于dao是全局的导致这个局部缓存一直没有释放model的class,classloader多次变换的话会导致缓存逐渐增大,进而无法gc
@wendal 针对这种情况 有没有建议性的修改方法呢? 我们的想法目前看只能在EntityHolder中加一个 clear的方法了, 每次classloader变化的时候清理缓存。
@wendal 收到, 反应就是快速。
添加回复
请先登陆