理论上,用Java构建的系统不会比用其他语言构建的系统使用更多的内存。那么为什么有这么多理由证明它们确实占用了内存呢?两个字:坏习惯。
(1)不要使用newBoolean()。
很多场景都需要布尔类型。例如JDBC中Boolean类型的Set和Get都是通过Boolean封装来传递的,大多数ORM也使用Boolean来封装Boolean类型,如: 例如:
lean("isClosed",newBoolean(true));
lean("isClosed",newBoolean(isClosed));
lean("isClosed",newBoolean(i==3));
通常这些系统中创建的布尔实例数量相当大,因此系统中充满了小对象上的大量布尔实例,这是相当内存密集。Boolean类实际上只需要两个实例,一个true实例和一个false实例。
Boolean类提供了两个静态变量:
publicstaticfinalBooleanTRUE=newBoolean(true);
publicstaticfinalBooleanFALSE=newBoolean(false);
需要的时候简单获取二变量就足够了,
例如:
lean("isClosed",);
如果您想基于句子2和3中的布尔变量创建布尔值怎么办?您可以使用Boolean提供的静态方法:f()
例如:
ps。setBoolean("isClosed",f(isClosed));
lean("isClosed",f(i==3));
因为valueOf的内部实现是:return(b?TRUE:FALSE);
这样可以节省大量的存储空间。我相信如果Java规范直接将布尔构造函数指定为私有的话,这种情况就不会再发生了。
(2)不要使用newInteger。
与Java下的Boolean类似-开发用Integer来封装int的情况很多,而通常用int表示的值通常都很小。SUNSDK中优化了整数实例化。Integer类存储从-128到127的256种状态的整数。当使用f(inti)并且传递的int范围在此范围内时,返回一个静态实例。这样,如果我们使用f来代替newInteger,那么内存占用将会显着减少。如果您希望您的系统可以在不同的SDK(例如IBMSDK)中使用,您可以创建自己的工具类封装,例如:例如f(),因此您可以在任何SDK中使用此函数。
(3)使用StringBuffer代替字符串相加。
我就不详细说了,因为已经被告知N遍了。我只是想讲一个不是笑话的笑话。当我查看国内一位“著名”Java开发的WEB系统的源代码时,发现其中使用了大量的字符串添加,通过组装SQL语句,实际创建了多达近100个字符串实例。无语!
(4)哈希表的过度使用
有一个肯定有开发经验的开发人员经常会使用哈希表(哈希表在JDK中的一种实现是HashMap)来缓存一些数据,以提高系统的运行速度。例如,Java课程考虑使用HashMap来缓存一些基本信息,例如物资信息和人员信息。这不仅提高了系统速度,而且还增加了系统内存的使用,特别是当有大量缓存信息时。事实上,我们可以使用
上一篇:w7 32位支持多大内存
下一篇:空间明明很大显示内存不足