tag:blogger.com,1999:blog-10940209.post116091845243502516..comments2023-11-04T10:39:41.621+08:00Comments on 鳥毅的Blog: DIP: Dependency Inversion Principle鳥毅http://www.blogger.com/profile/08368762184448456724noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-10940209.post-1161881132289344722006-10-27T00:45:00.000+08:002006-10-27T00:45:00.000+08:00經由 interface 呼叫 method (使用 invokeinterface) 通常會比直接...經由 interface 呼叫 method (使用 invokeinterface) 通常會比直接呼叫 (使用 invokevirtual) 慢。<BR/><BR/>不過以上面需要 cast 的這個例子,假如 Java compiler 夠聰明的話,應該要能夠用 invokevirtual 來呼叫 add() 及 clear(),這樣兩者的 performance 就沒有差別了。Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10940209.post-1161094801437938932006-10-17T22:20:00.000+08:002006-10-17T22:20:00.000+08:00我覺得還是有差,所以做了個小實驗。時間差一點點啦,幾乎感覺不出來。我常用子類別另一個原因是子類別的功...我覺得還是有差,所以做了個小實驗。<BR/>時間差一點點啦,幾乎感覺不出來。<BR/>我常用子類別另一個原因是子類別的功能比較多,偶爾會直接用子類別的方法。<BR/>未cast花3084毫秒,有cast花3153毫秒<BR/>測試程式如下:<BR/><BR/>mport java.util.*;<BR/>public class TestSpeed {<BR/>public static void main(String[] args) {<BR/>//較前的會慢一點 可能是HotSpot 的JIT影響,有興趣的人可以分開測<BR/>noCast();<BR/>cast();<BR/>}<BR/><BR/>public static void noCast() {<BR/>java.util.Calendar start = java.util.Calendar.getInstance(鳥毅https://www.blogger.com/profile/08368762184448456724noreply@blogger.comtag:blogger.com,1999:blog-10940209.post-1161055795448854352006-10-17T11:29:00.000+08:002006-10-17T11:29:00.000+08:00我是覺得啦hardcode 任何一個名稱就會相依於這個名稱當這個名稱代表的意義愈一般(也就是愈抽象時...我是覺得啦<BR/>hardcode 任何一個名稱就會相依於這個名稱<BR/>當這個名稱代表的意義愈一般(也就是愈抽象<BR/>時)受到變動而影響的機會就會愈小, 因為這<BR/>個名稱所代表的概念是比較一般的, 範圍比<BR/>較廣的, 比較有機會繼續容納變動後的概念<BR/>這是為什麼希望使用的名稱(也就意謂了概念<BR/>) 是愈抽象的愈好<BR/><BR/>不過文中提到如果都做 upcasting 速度會<BR/>變慢可能就不見得. 對採用dynamic <BR/>binding的程式語言來說, 就算沒有做<BR/>upcasting, 應該也是花一樣的時間來找出<BR/>要invoke的method究竟是那一個Anonymousnoreply@blogger.com