最近开发一个行网项目,对于一些频繁用到又不易更新的数据,譬如地区信息、一些基本的分类、新闻的分类,我采用了ArrayList 静态化 做为数据存储的容器,这样避免每次读取都要经过数据库,但是在做性能测试的时候发现jvm每次gc后的可用内存越来越小,到最后只剩下34M可用内存,于是想到了是不是全局化ArrayList造成的。

解决方案 »

  1.   

    就算你不做静态化存储,JVM的可用内存也会越来越小;关键是后面能否GC回收回来。缓存只要正确控制好内容和条目数,是可以有效提升性能的。
    如果你担心的话,就注意检查你ArrayList的规模。其实如果你用了Hibernate或MyBatis之类的数据访问组件的话,它们都是可以针对表配置缓存的。
      

  2.   

    你说的关键就是我要说的关键,每次GC后可用内存都慢慢变小,一直到34M后才算稳定了,我设置的JVM大小可是1G
      

  3.   

    你是用什么工具看的?另外,检查下你用于缓存的ArrayList的规模,也就是size()。