美文网首页
Java开发时可以提高性能的点

Java开发时可以提高性能的点

作者: 半罐子晃 | 来源:发表于2021-09-26 15:55 被阅读0次

1、合理的使用设计模式
单利模式:控制内存中只存在一个对象可以减少内存、减轻加载负担和时间,提升加载效率。
享元模式:减少对象创建的数量来达到减少内存

2、避免过多创建Java对象,可以采用享元模式来减少对象的创建,可以用基本数据类型代替包装类型的对象。

3、尽可能使用final修饰符,在Java中final关键字修饰后不会直接定义内联函数。而是告诉编译器可以将其修饰的函数看作内联函数,编译器会比较效率后决定是否视其为内联函数。如果是内嵌调用,虚拟机不再执行正常的方法调用(参数压栈,跳转到方法处执行,再调回,处理栈参数,处理返回值),而是直接将方法展开,以方法体重的实际代码替代原来的方法调用。
https://blog.csdn.net/smartbetter/article/details/80561284

4、尽可能使用局部变量,传递的参数和临时变量都保存在栈中,静态变量和实例变量等都存在堆中,栈相比于堆查询的效率高、空间小、产生的碎片小,栈自动释放而堆需要GC。

5、尽量使用基本数据类型代替对象,尽可能使用基本类型代替包装类型。
基本类型跟包装类型、对象产生的内存区域是不同的,基本类型数据产生和处理都在栈中,包装类型属于对象,在堆中产生实例。
  String str = "hello"; 上面这种方式会创建一个"hello"字符串,而且JVM的字符缓存池还会缓存这个字符串;
  String str = new String("hello"); 此时程序除创建字符串外,str所引用的String对象底层还包含一个char[]数组,这个char[]数组依次存放了h,e,l,l,o。

6、尽量不要将资源清理放在finalize方法中,由于GC的工作量很大,回收Young代内存时会引起应用程序暂停,使用finalize方法进行资源清理,会增加GC负担,程序运行效率更差。
尽量在finally块中释放资源,避免资源泄漏。

7、这块有问题请见评论:尽可能减少使用synchronize,同步对系统开销大甚至形成死锁,尽可能避免无谓的同步控制,synchronize的方法尽可能小,因为被锁住的方法执行完,其余线程无法调用当前对象的其余方法。
单线程应尽量使用HashMap、ArrayList,因为HashTable、Vector等使用了同步机制,下降了性能。
尽量合理的创建HashMap,建立较大hashMap时,避免多次扩容,减少进行hash重构的次数,准确估计大小,利用public HashMap(int initialCapacity, float loadFactor)构造函数来设置初始容量和加载因子。

8、这块有问题请见评论:合理选择String、StringBuilder 、StringBuffer。
StringBuffer:线程安全(内部大量使用synchronized机制)但效率低,提前估算容量避免重建提高效率StringBuffer buffer = new StringBuffer(1000);
StringBuilder:线程不安全、效率块。
String:不可变。String的引用在栈、String的值是一个字符数组,字符数组的值存放在常量池中。(字面常量存在常量池)

  • String str = "ABC"; str 在栈,"ABC"在常量池中。
  • String str = new String("ABC"); str的value存在堆中(为字符数组的引用),字符数组存在常量池中。

9、减少对变量的重复计算:for(int i=0;i<list.size();i++) 改为 for(int i=0,len=list.size();i<len;i++)
System.arraycopy() 循环复制数组

10、没必要的建立,比如:判断条件满足时再new 相关对象等。

11、对象释放前置:局部变量在方法结束后会变成垃圾,比如:方法1中没必要obj设为null,方法2中可以提前将不用的Obj设为null。

1.
    Public void test(){  
    Object obj = new Object();  
    ……  
    Obj=null;  
    }
2.
    Public void test(){  
    Object obj = new Object();  
    ……  
    Obj=null;  
    //执行耗时,耗内存操做;或调用耗时,耗内存的方法  
    ……  
    }

12、位运算符代替乘法、除法操作更高效。nt num = a * 2; int num = a / 2; 改为int num = a << 2; int num = a >> 2;

13、合理的选用容器

相关文章

网友评论

      本文标题:Java开发时可以提高性能的点

      本文链接:https://www.haomeiwen.com/subject/uvdzgltx.html