Java内存之内存管理的小技巧

1尽量使用直接量
当需要使用字符串,还有Byte、Short、Integer、Long、Float、Double、Boolean、Character包装类的实例时,程序不应该采用new的方式来创建对象,而应该直接采用直接量来创建它们。
2使用StringBuilder和Stringbuffer进行字符串连接
String、StringBuilder和StringBuffer都可代表字符串。其中String代表字符串序列不可变的字符串,而StringBuilder和Stringbuffer都代表字符序列可变的字符串。
如果程序使用多个String对象进行字符串连接运算,在运行时将生成大量临时字符串,这些字符串会保存在内存中从而导致程序性能下降。
3尽早释放无用对象的引用
大部分的时候,方法局部引用变量所引用的对象会随着方法结束而变成垃圾,因为局部变量的生存期限很短,当方法运行结束之时,该方法内部的局部变量就结束了生命期限。因此,大部分时候程序无需将局部、引用变量显示设为null.
4.尽量少用静态变量
最坏的情况是某个对象被static变量所引用,那么垃圾回收机制通常是不会回收这个对象所占的内存。
5避免在经常调用的方法、循环中创建Java对象    
经常调用的方法和循环有一个共同特征,这些代码段会被多次重复调用。
不断的分配和回收操作中,程序的性能受到了巨大的影响。
6缓存经常使用的对象
如果有些对象需要被经常使用,可以考虑把这些对象用缓存池保存起来,这样当下次需要时就直接  拿出这些对象来用。典型的缓存就是数据连接池,数据连接池里缓存了大量数据库连接。每次程序需要访问数据库时,都可直接取出数据库连接。
实现缓存通常有两种方式:
使用HashMap进行缓存。
直接使用某些开源的缓存项目。
如果直接使用hashmap进行缓存,程序员需要手动控制Hashmap容器里key-value对不至于太多,因为当key-value太多时将导致HashMap占用过大的内存,从而导致系统性能下降。
(缓存设计是一种以牺牲系统空间来换取运行时间的技术,不管是哪种缓存实现,都会使用容器来保存已用过的对象,方便下次再用。而这个保存对象的容器将占据一块不算太小的内存,如何控制该容器占用的内存  不至于过大,而该容器又能保留大部分已用过的对象,这就是缓存设计的关键
7.尽量不要使用finalize方法
垃圾回收机制,在一个对象失去引用之后,垃圾回收器准备回收该对象之前,垃圾回收机制会先调用该对象的finalize()方法来执行资源清理。实际上,开发者将资源清理放在finalize()方法中完成是非常拙劣的选择。
8.考虑使用软引用(softReference)
当程序需要创建长度很大的数组时,可以考虑使用softreference来包装数组元素,而不是直接让将数组元素来引用对象。
softReference是个很好的选择:当内存足够时,它的功能等同于普通引用;当内存不够时,它会牺牲自己,释放软引用的对象。
使用软引用来引用对象时不要忘记了软引用的不确定性。程序通过软引用所获取的对象有可能为null-当系统内存紧张时,softrefernce所引用的Java对象被释放。由于通过softrefernce获取的  对象可能为null,因此应用程序取出softreference所引用的Java之后,应该显示判断该对象是否为null;当该对象为null时,应重建对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值