Java内存管理些许优化技巧

所谓内存优化,就是清空无效引用,减少不必要的内存浪费.

 1.尽量使用直接量

   使用字符串,Byte,Short,Integer,Long,Float,Double,Boolean ,Character等包装类的实例时,程序不要采用new的方式创建对象,而是尽量直接采用直接量创建

 比如  

      String str="Hello";  此时会直接创建一个Hello的字符串,而且JVM的字符串缓存池还会缓存这个字符串

 另外一种方式

      String str=new String("Hello");

       此时也会创建一个字符串在字符串缓存池中,但是str所引用的String对象底层还包含一个char[]数组,依次存放H,e,l,l,o等字符.

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

      String,StringBuilder和StringBuffer都可以代表字符串,其中String代表字符序列不可变的字符串,StringBuffer和StringBuilder代表字符串序列可变的字符串

      程序使用多个String对象进行字符串连接运算,在运行将产生大量临时字符串,而这些字符串会保存在内存中从而导致程序性能下降.

3.尽早释放无用对象的引用

      方法局部引用变量所引用的对象会随着方法结束而变成垃圾,且生存期限很短,方法运行结束时,内部的局部变量就结束生命期限,因此大部分情况下无需将局部引用变量显示设为null.

      但是如果引用变量或局部变量已不在使用,方法内部还要执行耗时,耗内存的操作,或者还需要调用耗时,耗内存的方法,直接把变量设为null,可以尽早释放引用.可能情况:程序在执行剩下的耗内存,耗时的操作时,JVM就会回收之前释放的引用.

4.尽量少用静态变量

    class Test{  static Object obj=new Object();}

   只要obj变量还被引用,gc就不会回收内存,  而obj是Test类的静态变量,生命周期和Test类同步的,而Test类不被卸载情况下,其对应的Class对象会常驻内存,知道程序运行结束,因此obj所引用的Object对象被创建,也会常驻内存,直到程序运行结束.内存会长时间得不到回收

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

     例如: 在for循环中,尽量不要new一个新的对象

     for(int i=0;i<10;i++){

         Object obj =new Object();

    }

每次循环时都会新创建一个obj对象,且生命周期也很短,系统回收它们所占用的内存空间,不断的分配,回收操作中,程序的性能会受到很大影响.

6.缓存经常使用的对象

      对于经常使用的对象,可以直接用缓存池保存起来,下次需要使用时可以直接拿出使用,数据连接池就是典型的缓存,数据连接池缓存了大量的数据库连接,每次程序访问数据库时都可以直接取出数据库连接.

     缓存最简便的方法就是HashMap缓存,也可以使用其它缓存项目

7.尽量不使用finalize方法

  当一个对象失去引用时,垃圾回收器准备回收该对象前,垃圾回收机制会先调用对象的finalize()方法进行资源清理,但是垃圾回收算法执行时工作量很大,尤其回收Young代内存时,大都会引起应用程序暂停,严重影响效果,因此使用finalize方法会导致垃圾回收器的负担更大,导致程序运行效率更差

8.使用SoftReference

    当内存足够时,功能相当于普通引用,当内存不够时,会牺牲自己,释放软引用所引用的对象,但软引用具有不确定性,程序通过软引用所获取的对象可能为null,所以需先显示判断该对象是否为null,当该对象为null时,重建该对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值