spring配置的bean是默認單例,那么在程序中,得到一個實例一定比創建一個實例的速度快,也更加省資源。今天實際測試的時候發現,new 一個對象比spring得到一個對象快多了。后面自己又加了個單例測試,來對比一下,看實測結果:
public static void main(String[] args) { ReceiveProcess receiveProcess; ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); long begin = System.currentTimeMillis(); int num = 10000000; for (int i = 0; i < num; i++) { receiveProcess = (ReceiveProcess) appCt.getBean("textReceive"); } System.out.println("spring得到實例總時間:" + (System.currentTimeMillis() - begin)); long begin2 = System.currentTimeMillis(); ReceiveProcess re = null; for (int j = 0; j < num; j++) { re = new TextReceiveProcess(); } System.out.println("創建實例得到的總時間:"+ (System.currentTimeMillis() - begin2)); ReceiveProcess reInstance = null;; long begin3 = System.currentTimeMillis(); for (int d = 0; d < num; d++) { reInstance = TextReceiveProcess.getInstance(); } System.out.println("單例情況下得到總時間:"+(System.currentTimeMillis() - begin3)); }
得到的結果:
spring得到實例總時間:5257 創建實例得到的總時間:48 單例情況下得到總時間:16
偶爾會出現這種結果,這個結果我就有點不是很理解了,有時候創建的對象和單例得到的實例時間差不多,這是為什么了?
spring得到實例總時間:5258 創建實例得到的總時間:32 單例情況下得到總時間:31
總結一下,不知道有沒有跟我一樣理解的朋友。以為spring配置的bean比new一個更加省時省力,實際上測試的結果確不是這樣子的。我們用spring實際是用spring管理資源,知道一些特性后,直接拿來用。當遇到性能要求時,或許這塊的功能反而起到了反作用,今天我所遇到的就是這樣的事。
