当前位置:首页 > 内存 > 正文

java如何强制清空内存

  • 内存
  • 2024-06-05 01:51:30
  • 8884

一、Java语言中内存管理的几个技巧?

理论上,用Java构建的系统不会比用其他语言构建的系统使用更多的内存。那么为什么有这么多理由证明它们确实占用了内存呢?两个字:坏习惯。


(1)不要使用newBool​​ean()。


很多场景都需要布尔类型。例如JDBC中Boolean类型的Set和Get都是通过Boolean封装来传递的,大多数ORM也使用Boolean来封装Boolean类型,如: 例如:


lean("isClosed",newBool​​ean(true));


lean("isClosed",newBool​​ean(isClosed));


lean("isClosed",newBool​​ean(i==3));


通常这些系统中创建的布尔实例数量相当大,因此系统中充满了小对象上的大量布尔实例,这是相当内存密集。Boolean类实际上只需要两个实例,一个true实例和一个false实例。


Boolean类提供了两个静态变量:


publicstaticfinalBooleanTRUE=newBool​​ean(true);


publicstaticfinalBooleanFALSE=newBool​​ean(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来缓存一些基本信息,例如物资信息和人员信息。这不仅提高了系统速度,而且还增加了系统内存的使用,特别是当有大量缓存信息时。事实上,我们可以使用