日期:2014-05-19  浏览次数:20611 次

全局化ArrayList,做为大型网站常用数据存储容器,是否会导致内存泄漏
最近开发一个行网项目,对于一些频繁用到又不易更新的数据,譬如地区信息、一些基本的分类、新闻的分类,我采用了ArrayList 静态化 做为数据存储的容器,这样避免每次读取都要经过数据库,但是在做性能测试的时候发现jvm每次gc后的可用内存越来越小,到最后只剩下34M可用内存,于是想到了是不是全局化ArrayList造成的。
------最佳解决方案--------------------
就算你不做静态化存储,JVM的可用内存也会越来越小;关键是后面能否GC回收回来。

缓存只要正确控制好内容和条目数,是可以有效提升性能的。
如果你担心的话,就注意检查你ArrayList的规模。

其实。。。如果你用了Hibernate或MyBatis之类的数据访问组件的话,它们都是可以针对表配置缓存的。
------其他解决方案--------------------
静态化在GC后是不会变化的,运行一顿时间后如果稳定在一个值上是没有问题的。
------其他解决方案--------------------
你说的关键就是我要说的关键,每次GC后可用内存都慢慢变小,一直到34M后才算稳定了,我设置的JVM大小可是1G
------其他解决方案--------------------
你是用什么工具看的?

另外,检查下你用于缓存的ArrayList的规模,也就是size()。
------其他解决方案--------------------
自己写的脚本测试的,并没有存储大型数据,各位这么说我心里有数了,感谢各位了
------其他解决方案--------------------
你的这种方式我们也经常用,一次性加载到内存一般是稳定,但是不要太大。
------其他解决方案--------------------
应该是代码有问题。  怎么会内存越来越高了呢。