<< 我收藏的链接(46) | 首页 | 如何清除Google app engine里data store过期的_ah_session >>

Unloading class sun.reflect.GeneratedMethodAccessor

是正常的现象,说明大量使用反射生成的class被jvm正确回收了。 

看来你应该是permgen区outofmermory了,可以尝试在启动配置中加大permgensize,不过不建议太大,不要超过300M,而且这样也只能治标不能治本。 

jdk dynamicproxy每次都会生成新的代理类,如果你不卸载这些代理类,permgen区outofmemory是迟早的事情。 
如果你真的不想卸载加载到jvm中的代理类,就要考虑复用生成的代理,这样的话,jdk的dynamicproxy是不行的,你要使用cglib来生成可复用的代理类。 

因此,你有两条路可以走 
1、继续使用jdk的dynamicproxy,但不要禁止class卸载。 
2、使用cglibproxy,复用代理类,避免大量生成的代理类。

加上-noclassgc,可使jvm不卸载加载的class

标签 : ,



发表评论 发送引用通报