经过测试发现有以下几点:
1、window7下部署一个空的javaweb(jdk7、tomcat7),什么都不操作,它的非堆内存还是出现缓慢的增长的,而且不回收
2、class.forName,每次都会加载类,而不是从内存中读取,这个有点坑。与官方文档不符合
3、每次调用反射都会增加非堆内存,GC无法回收,如果反射的class比较大,效果会很明显,这个更加坑
4、如果你的项目加载几十M的jar,那么 启动后占用非堆内存也很大
5、对于反射不回收的问题,spring的动态代理处理方式是使用缓存,第一次调用反射然后cache,后面就从cache中取。不再调用反射。
如下:
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.target.getClass());
enhancer.setUseCache(true);// 设置是否使用缓存,默认值就是true