本来是为了测算java异常的时间开销,但从测算结果中发现了一些问题,现把原文发在这里,请大家看看,原因何在!!!(顺序有些颠倒)测算异常的时间开销/*************************后记提前了********************************************
【后记】:
      同样,从上面的结果似乎可以得出这样的一个结论:如果处理的对象个数足够多,那么Vector的时间开销会少于用足够大的数组存储这些对象。这好像与我一直认为的利用数组存储对象的效率要高于利用Vector存储对象的效率相矛盾。原因何在???
********************************************************************************/每抛出一个异常,JVM必须挂起正常的程序运行,查找并运行一个异常处理程序。所有这些都需要时间。那么,java的异常处理需要多少时间开销?【目的】:测试java中异常的时间开销
【场景】:假设有一应用程序,必须把一些对象保存在内存中,但对象的数量并不知道。
    这里给出三种解决问题的方案:1。选取Vector2。使用一个最初有N个元素的数组。如果插入N个对象,那么该数组不会发生异常3。使用一个初始个数为0的数组。插入N个对象的话,将出现N次异常
【测试环境】:1。Windows XP with SP22。CPU:PIII 900MHz   内存:256M3。Java version:1.4.2_04【算法设计】:
如何实现,这里不详细叙述了。代码很少,相信大家一看就能明白。import java.util.Vector;public class ExceptionOveload {
                //需要加入元素的个数
        public static final int N=20000;
        
        private double vectorTime;
        private double arrayWithOTime;
        private double arrayWithNTime;
        
        private Vector vector;
        private Integer[] array;
        
        private void insertAt(int k){
                try{
                        array[k]=new Integer(k);
                }
                catch(ArrayIndexOutOfBoundsException e){
                        Integer[] newarray = new Integer[array.length + 1];
                        for(int i=0;i<array.length;i++)
                                newarray[i] = array[i];
                        newarray[array.length] = new Integer(k); 
                        array = newarray;
                }
        }
        
        public void testVector(int N){
                //测试vector中加入N个元素的系统开销
                long startTime,endTime;
                vector = new Vector(0);
                
                startTime = System.currentTimeMillis();
                
                for(int i=0;i<N;i++){
                        vector.addElement(new Integer(i));
                }
                endTime = System.currentTimeMillis();
                
                vectorTime = endTime - startTime;
        }
        
        public void testArrayWithO(int N){
                //测试0个元素的数组中加入N个元素的系统开销
                long startTime,endTime;        
                array = new Integer[0];
                
                startTime = System.currentTimeMillis();
                for(int i=0;i<N;i++)
                        insertAt(i);
                endTime = System.currentTimeMillis();        
                
                arrayWithOTime = (double)(endTime - startTime);
        }
        
        public void testArrayWithN(int N){
                //测试N个元素的数组中加入N个元素的系统开销
                long startTime,endTime;        
                array = new Integer[N];
                
                startTime = System.currentTimeMillis();
                for(int i=0;i<N;i++)
                        insertAt(i);
                endTime = System.currentTimeMillis();        
                
                arrayWithNTime = (double)(endTime - startTime);
        }
        
        public void show(){
                System.out.println("Insert " + N + " elements into:");
                System.out.println("    Vector in " + vectorTime + " millisecond");
                System.out.println("    Array with 0 element in " + arrayWithOTime + " milliseconds");
                System.out.println("    Array with " + N + " elements in " + arrayWithNTime + " milliseconds");
        }
        
        public static void main(String argv[]){
                ExceptionOveload e = new ExceptionOveload();
                e.testVector(ExceptionOveload.N);
                e.testArrayWithO(ExceptionOveload.N);
                e.testArrayWithN(ExceptionOveload.N);
                e.show();                
        }
                
}【实验结果】:
Insert 20000 elements into:
    Vector in 40.0 millisecond
    Array with 0 element in 26548.0 milliseconds
    Array with 20000 elements in 0.0 millisecondsInsert 40000 elements into:
    Vector in 50.0 millisecond
    Array with 0 element in 136797.0 milliseconds
    Array with 40000 elements in 80.0 millisecondsInsert 60000 elements into:
    Vector in 80.0 millisecond
    Array with 0 element in 370112.0 milliseconds
    Array with 60000 elements in 120.0 milliseconds【结论】:
      从上面的实验可以看出,异常的时间开销异常的大。因此在设计中,最好只用异常处理机制捕捉真正的异常,而不要利用异常机制来弥补设计上的缺陷,否则,得不偿失!!!