NutzCN Logo
精华 关于Nutz中FastClassFatory的疑问
发布于 380天前 作者 thineagle 283 次浏览 复制 上一个帖子 下一个帖子
标签: dao

各位好, 最近用Nutz的DAO部分写一个应用, 发现一个问题,请各位指教。 我用urlclassloader 装载了一个类,此类中调用了nutz的相关方法, 当此类更新的时候我用重新new了一个urlclassloader来装载这样就有一个问题, 看FastClassFatory中对model的classloader进行了缓存, 导致旧的urlclassloader一直不能被GC,如果频繁更新的时候,就会出现Perm Space越来越大,  另外发现model类自动生成的$$FASTCLASS也不会被GC , 有什么解决办法吗?

10 回复

定时clear一下吧

FastClassFactory.cache.clear();

或者

FastClassFactory.clearCache();

或者直接禁用缓存

FastClassFactory.setUseCache(false);
@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变化的时候清理缓存。

似乎也只能这样改了, 改动也最小

或者把持有方式改成 SoftReference ?

软引用似乎是一个好的解决办法, 我这里先用clear了, 你在总体考虑下。

@wendal 收到, 反应就是快速。

添加回复
请先登陆
回到顶部