> 文章列表 > java 本地缓存 使用static 内存泄露 oom

java 本地缓存 使用static 内存泄露 oom

java 本地缓存 使用static 内存泄露 oom

公司里,有时候一些经常用到的数据,例如emp员工,org组织,等数据,会保存到本地缓存里。一般用map封装,这样用起来很方便。

例如:

Map<String,String> orgMap = orgsMap.get(orgCode);
return orgMap.get("orgName");return orgMap.get("parentOrgCode");return orgMap.get("level");

但有时候会遇到内存溢出问题。尤其emp有几万条甚至十几万条数据,可能就把内存占了几十兆。 

所以尽量缩减保存的数据,例如,一个emp对象,就取其中几个常用的字段值保存到map里。

static使用注意

static是在类加载时就初始化。即无需创建对象,直接用类名就可以去点static的变量,拿到值。

使用static会占住内存,尽量不要让static修饰的变量引用大对象

static一般用来保存常量,像字符串或者数字。会把一些初始化数据放进去。

static不要乱用, 很多隐蔽的内存泄露就是这个原因, 而且在程序大的时候很难找到原因。
所有被static引用的一条引用链都不会被垃圾回收

用static太多是否耗内存?-CSDN社区

垃圾回收

变量显示的赋值为null,或者程序结束,才会回收。

static属性会被垃圾回收吗?-CSDN社区

static变量,static方法多了,就会一直占着内存,就相当于玩手机时,把电话本,短信,音乐等所有你能开的都开了,这时你要是想玩个游戏,不清一下内存,2G的RAM 手机是带不起来的

为什么静态方法会导致性能下降?-CSDN社区

2006年的上古帖子,看看图个乐子。没想到csdn还保存有2006年的数据。

我发现我同事的java代码中所有class的方法都是static,他说这样调用就很方便(因为不用new一个对象了,直接class.方法调用),请问他这样-CSDN社区