易截截图软件、单文件、免安装、纯绿色、仅160KB

漫谈Java程序的性能优化

Java使得复杂应用的开发变得相对简单。毫无
疑问,它的这种易用性对Java的大范围流行功不可没。然而,这种易用性实际上是一把双刃剑。一个设计良好的Java程序,性能表现往往不如一个同样设计
良好的C++程序。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地
运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我们就来具体地分析一下这方面的问题。
在java中,使用最频繁、同时也是滥用最多的
一个类或许就是java.lang.String,它也是导致代码性能低下最主要的原因之一。请考虑下面这个例子:
String s1 = "Testing
String";
String s2 = "Concatenation Performance";
String s3 = s1 +
" " + s2;
几乎所有的Java程序员都知道上面的代码效率
不高。那么,我们应该怎么办呢?也许可以试试下面这种代码:
StringBuffer s = new
StringBuffer();
s.append("Testing String");
s.append(" ");
s.append("Concatenation
Performance");
String s3 = s.toString();
这些代码会比第一个代码片段效率更高吗?答案是
否定的。这里的代码实际上正是编译器编译第一个代码片段之后的结果。既然与使用多个独立的String对象相比,StringBuffer并没有使代码有
任何效率上的提高,那为什么有那么多的Java书籍批评第一种方法、推荐使用第二种方法?
第二个代码片段用到了StringBuffer
类(编译器在第一个片段中也将使用StringBuffer类),我们来分析一下StringBuffer类的默认构造函数,下面是它的代码:
public StringBuffer() {
this(16); }
默认构造函数预设了16个字符的缓存容量。现在
我们再来看看StringBuffer类的append()方法:
public synchronized
StringBuffer append(String str) {
 if (str == null) { 
    str =
String.valueOf(str);
  }
 int len = str.length();
 int newcount
= count + len;
 if (newcount > value.length)
expandCapacity(newcount);
 str.getChars(0, len, value, count);
 count
= newcount; return this;
}
append()方法首先计算字符串追加完成后
的总长度,如果这个总长度大于StringBuffer的存储能力,append()方法调用私有的expand


相关文档:

java:手写二叉树BinaryTree添加和查询方法

package arrays.myArray;
public class BinaryTree {
 private Node root;
 // 添加数据
 public void add(int data) {
  // 递归调用
  if (null == root)
   root = new Node(data, null, null);
  else
   addTree(root, data);
......

java:手写MyArrayLisy的常用方法,增删改查

package arrays.myArray;
public class MyArrayList {
 private Object[] arrObj = new Object[3];
 private int size = 0;
 
 // 长度
 public int size() {
  return size;
 }
 // insert
 public void add(Object obj) {
  add(size,obj);
&nb ......

java:四则混合运算,模拟微软的计算器

package arrays.myArray;
import java.util.Scanner;
public class SortObject {
 private static int intercePosition = 0; // 记录单个运算数据的长度
 private static int[] intercePositionIndex = null; // 记录“(”的下标
 private static int[] intercePositionEnd = null; // 记录 ......

java:递归:汉罗塔游戏计算出最少的步数

package game;
public class HanTa {
 public static int i = 0;
 public static void main(String[] args){
  calc('A', 'B', 'C', 2);
  System.out.println("最少需要"+i+"步。");
 }
 
 //汉罗塔游戏计算
 public static void calc(char src, char ilde, c ......

java:递归:10的阶乘

package game;
public class JieCeng {
 public static void main(String[] args){
  System.out.println(fun(10));
 }
 
 public static int fun(int n){
  if(1==n)
   return 1;
  System.out.println( n * fun(n-1));
  return ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号