文章插图
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化 。一般有两种方案:即优化代码或更改设计方法 。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能 。而一个设计良好的程序能够精简代码,从而提高性能 。
一、对象的生成和大小的调整 。JAVA程序设计中一个普遍的问题就是没有好好的利用JAVA语言本身提供的函数,从而常常会生成大量的对象(或实例) 。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理 。因此,生成过多的对象将会给程序的性能带来很大的影响 。
例1:关于String ,StringBuffer,+和Append
JAVA语言提供了对于String类型变量的操作 。但如果使用不当,会给程序的性能带来影响 。如下面的语句:
String name=new String("HuangWeiFeng"); System.out.println(name+"is my name");看似已经很精简了,其实并非如此 。为了生成二进制的代码,要进行如下的步骤和操作:
- 生成新的字符串 new String(STR_1);
- 复制该字符串;
- 加载字符串常量"HuangWeiFeng"(STR_2);
- 调用字符串的构架器(Constructor);
- 保存该字符串到数组中(从位置0开始);
- 从java.io.PrintStream类中得到静态的out变量;
- 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);
- 复制该字符串缓冲变量;
- 调用字符串缓冲的构架器(Constructor);
- 保存该字符串缓冲到数组中(从位置1开始);
- 以STR_1为参数,调用字符串缓冲(StringBuffer)类中的append方法;
- 加载字符串常量"is my name"(STR_3);
- 以STR_3为参数,调用字符串缓冲(StringBuffer)类中的append方法;
- 对于STR_BUF_1执行toString命令;
- 调用out变量中的println方法,输出结果 。
经修改,上面的代码可以用如下的代码来替换 。
StringBuffer name=new StringBuffer("HuangWeiFeng"); System.out.println(name.append("is my name.").toString());系统将进行如下的操作:
- 生成新的字符串缓冲变量new StringBuffer(STR_BUF_1);
- 复制该字符串缓冲变量;
- 加载字符串常量"HuangWeiFeng"(STR_1);
- 调用字符串缓冲的构架器(Constructor);
- 保存该字符串缓冲到数组中(从位置1开始);
- 从java.io.PrintStream类中得到静态的out变量;
- 加载STR_BUF_1;
- 加载字符串常量"is my name"(STR_2);
- 以STR_2为参数,调用字符串缓冲(StringBuffer)实例中的append方法;
- 对于STR_BUF_1执行toString命令(STR_3);
- 调用out变量中的println方法,输出结果 。
代码段1:
String name= new StringBuffer("HuangWeiFeng");name+="is my";name+="name";代码段2:
StringBuffer name=new StringBuffer("HuangWeiFeng");name.append("is my");name.append("name.").toString();因此,充分的利用JAVA提供的库函数来优化程序,对提高JAVA程序的性能时非常重要的.其注意点主要有如下几方面:
1. 尽可能的使用静态变量(Static Class Variables)
如果类中的变量不会随他的实例而变化,就可以定义为静态变量,从而使他所有的实例都共享这个变量 。
例:
public class foo { SomeObject so=new SomeObject();}【阿里P7架构师浅析:如何优化Java程序设计、编码提高性能】就可以定义为:
public class foo { static SomeObject so=new SomeObject();}2. 不要对已生成的对象作过多的改变 。
对于一些类(如:String类)来讲,宁愿在重新生成一个新的对象实例,而不应该修改已经生成的对象实例 。
例:
String name="Huang";name="Wei";name="Feng";
推荐阅读
- 网络工程师之nslookup命令
- 日志服务架构设计
- 软件架构-解密电商系统-秒杀的原理和开发思路
- 为什么电池以旧换新很便宜?修车师傅说出其中猫腻,别再吃亏了
- 教师要充分认识教学反思的重要性 如何进行教学反思
- 微服务架构,多“微”才合适?
- 基于token机制鉴权架构
- 事件驱动微服务体系架构
- 中小型研发团队对于架构的选择与思考
- 阿里大神分享API网关在微服务架构中的应用