在一個有少量POJO和很多操作它們的幫助器方法的應用程序中,有什麼更好的性能方面:使輔助器類成爲單例或使方法成爲靜態?靜態方法或Singleton性能明智(Android)?
7
A
回答
9
靜態方法將是非常輕微更好的性能和內存明智的:虛函數調用的
- 避免的(潛在的)的開銷。
- 消除實際類的實例所需的內存。
- 當您使用它時,不需要獲取該類的實例。
但老實說,我可能仍然會使它成爲singleton
反正。如果不這樣做,你會得到的收益可能非常小,即使在移動環境中,它們也不會產生差異。
6
你可以避免這種情況,並讓他們經常上課嗎?
忽略性能問題,我建議避免singeltons和靜態方法來提高可測試性。
單身和靜態方法可能很難測試;在這方面,單身人士基本上是靜態方法,但名稱不同。 Misko Hevery,誰在Google Test team工作,對這個議題的一些好文章:
2
以你的面值問題,靜態調用可能只需要最少的CPU功率。原因在於普通方法是動態綁定的,需要在運行時進行一些查找,而靜態方法則需要編譯時間。
話雖如此,它可能不會影響您的應用程序。差別非常小。如果您的應用程序使用gui,xml渲染,互聯網連接或其他外部操作來做任何事情,那麼您會發現這些活動使得簡單的方法查找變得相當龐大。
即使你不這樣做,性能分析,期間更容易遇到瓶頸,單一阻礙了您的應用程序,並發現它是沒有方法查找,但一些邏輯,你做你的自我。例如,你使用了一個ArrayList而不是一個hashset,而contains方法的代價很高。因爲在這些情況下的性能並不重要,所以我建議在靜態方法上面使用單例實現,因爲設計稍微靈活一點。儘管在你提供的選擇之外,我會完全放棄幫助類,並將你的pojo中的方法內聯。
4
不要擔心這種荒謬的微觀優化。擔心可維護性。
這聽起來像應用程序是用一個完全非面向對象的風格,可以從消除了大部分的這些「輔助方法」,並把他們受益匪淺屬於他們的地方,以及它們操作的數據。
相關問題
- 1. createOperate方法不能被聲明爲靜態;靜態方法只能在靜態或頂級類型中聲明
- 2. Objective C/C靜態方法性能
- 3. 控制參考靜態方法性能
- 4. Android Studio靜態或非靜態變量和方法
- 5. Visual Studio代碼 - 缺少靜態方法的智能感知
- 6. 在Dao類中使用靜態方法或非靜態方法?
- 7. 靜態方法或OO替代方法?
- 8. Android性能的靜態變量或屬性
- 9. android-靜態方法問題
- 10. 靜態方法或使用靜態字段的非靜態方法
- 11. 功能與靜態方法
- 12. 通過靜態和非靜態方法訪問靜態屬性?
- 13. Singleton實例爲靜態字段與靜態變量在getInstance()方法
- 14. 爲什麼@decorator不能裝飾靜態方法或類方法?
- 15. 靜態方法vs實例方法,多線程,性能
- 16. 是否可能的良好做法時聲明方法靜態?
- 17. Singleton類或在ASP.NET MVC應用程序的靜態方法的類
- 18. 靜態方法或setter或getters?
- 19. singleton類可以靜態嗎?
- 20. C++中的多態性靜態方法
- 21. 靜態靜態方法?
- 22. C#應該Singleton包含靜態方法嗎?
- 23. 如何訪問Singleton類的靜態方法?
- 24. 新的類實例VS Singleton類VS靜態方法
- 25. 方法明智LOC計數
- 26. 在ASP.net中使用靜態方法進行安全驗證是不明智的?
- 27. 關鍵字「這個」是不是一個靜態屬性,靜態方法,或
- 28. 無法對非靜態方法進行靜態引用 - Android TabbedActivity
- 29. android靜態方法的用法
- 30. 動態ImageButton方法崩潰Android與智能臉4.4
好吧,那麼JDK是寫在非面向對象的風格,以及所有它的Arrays.sort(),Long.valueOf()的,等等。;) – yanchenko 2009-03-02 06:15:17