立即注册
 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广州大学城网业务调整

[Java/JSP] java内存管理的8个小技巧 [复制链接] qrcode

查看: 1301 | 回复: 0

zoney
发表于: 2015-8-3 15:51:21 | 显示全部楼层

. 尽量使用直接量

这个大家应该清楚,所以只做简诉:
String str = "hello";
上面这种方式会创建一个“hello”字符串,而且JVM的字符缓存池还会缓存这个字符串;
String str = new String("hello");
此时程序除创建字符串外,str所引用的String对象底层还包含一个char[]数组,这个char[]数组依次存放了h,e,l,l,o

2. 使用StringBuilder和StringBuffer进行字符串连接

这个我就不多讲了,用String做连接时会生成大量临时字符串

3. 尽早释放无用对象的引用
大部分时,方法局部引用变量所引用的对象 会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为null。
         例如:        
Public void test(){
                   Object obj = new Object();
                   ……
                   Obj=null;
}
复制代码

上面这个就没必要了,随着方法test()的执行完成,程序中obj引用变量的作用域就结束了。但是如果是改成下面:
Public void test(){

                   Object obj = new Object();

                   ……

                   Obj=null;

                   //执行耗时,耗内存操作;或调用耗时,耗内存的方法

                   ……

}
复制代码

这时候就有必要将obj赋值为null,可以尽早的释放对Object对象的引用。

4. 尽量少用静态变量

当某个对象被static变量所引用,那么GC通常是不会回收这个对象所占的内存。如下:
Class Person{

         static Object obj = new Object();

}
复制代码

对于上面的对象而言,obj变量的生命周期与Person类同步,在其不被卸载的情况下,其对应的Class对象会常驻内存,知道程序结束。

5. 避免在经常调用的方法、循环中创建java对象

6. 缓存经常使用的对象

这里首先说一个实现缓存时常有的两种方式:
n 使用HashMap进行缓存
n 直接使用某些开源的缓存项目

如果是第一种,程序员需要手动控制HashMap容器里key-value对不至于太多,从而导致其占用过大的内存,致使系统性能下降。
而第二种多使用一些缓存算法,提高系统运行效率,例如OSCache,Ehcache等,它们大都实现了FIFO\MRU等常见的缓存算法。

7. 尽量不要使用finalize方法

实际上,将资源清理放在finalize方法中完成是非常不好的选择,由于GC的工作量很大,尤其是回收Young代内存时,大都会引起应用程序暂停,所以再选择使用finalize方法进行资源清理,会导致GC负担更大,程序运行效率更差。

8. 考虑使用SoftReference

当程序需要创建长度很大的数组时,可以考虑使用SoftReference来包装数组元素
SoftReference是个很好的选择,当内存足够时,它的功能等同于普通引用,当内存不足时,它会牺牲自己,释放软引用所引用的对象。例如创建一个长度为100000的Person数组。

注意:在使用软引用来引用对象时不要忘记软引用的不确定性,程序通过软引用所获取的对象有可能为null(内存紧张时)。所以当应用程序取出SoftReference所引用的java对象之后,应该显式判断该对象死后为null,为null时,应该重建对象。
信盈达科技(芯片级方案设计公司),结合信盈达多年研发经验所积累的资源,开发出拥有完全知识产权课程体系:
1.电子基础 PCB画板 单片机项目开发 实现从菜鸟到单片机工程师的蜕变 成就您的高薪
2.C语言 ARM9.ARM11.cortex-m3 各种平台任选择,Linux(A8.A9)学习从底层驱动到应用开发一网打尽
3.JAVA Android应用驱动开发,让亲身体验手机和平板的开发流程
4.FPGA应用开发 DSP实训 STM32实战学习 让亲身体验一线工程师项目实践教学。
四大课程体系全面升级,任选择,轻松学习,提升技术项目案列教学,重在 有兴趣您就来!想要高薪您就来!

上课地点:深圳龙华南山龙岗宝安,广州,郑州,长沙,南宁八大直营中心为服务!
上课时间:全日制,晚班周末班均可!
详情咨询刘老师 3311615775
跳转到指定楼层
快速回复 返回顶部 返回列表