當我們使用接口調用方法時,與內存優化有任何關係。 只有該方法加載到內存中嗎?當通過對象調用方法時,該對象的所有方法都被加載到內存中?通過接口調用對象的方法時的內存使用情況?
1
A
回答
5
基於接口的編程不涉及內存消耗 - 這是一種增加關注點分離的技術。
當您使用接口作爲參數(例如)時,您仍然需要傳入實現該接口的實際對象。您將通過接口訪問它,並且您可以用實現該接口的任何其他對象替換它。這就是你如何創建一個解耦方法。對於傳入的實際對象,您仍然需要內存。
2
如果通過接口或通過對對象的引用調用方法,則無關緊要。接口引用仍然引用一個實例。該類型有許多方法,這些方法在加載類型時加載(並根據需要編譯JIT)。
0
不,調用使用接口的方法和使用類調用方法沒有實際區別。
當你使用一個接口時,只是你的參考是不同的。該參考仍指向一個類的實例。由於接口本身不包含任何實現,所以不能有接口的實例,所以在另一端總是存在一個類的實例。
0
將什麼方法加載到內存中與接口無關。在.NET中,當方法首次被調用時,它被編譯成本地代碼,然後保存在內存中。無論您如何訪問它(無論是直接,通過界面還是使用委託)都無關緊要。
此外,方法本身的內存消耗應該非常低,沒有你應該關心的東西。
0
含糊不清的問題。我猜你在問是否使用界面會導致你使用的任何語言的性能損失。
答案是對於C++(純虛函數)來說,是的。在某些非常多的情況下可能很重要。
對於Java(和.Net可能),不是真的。
相關問題
- 1. 對象的內存使用情況
- 2. 通過COM接口調用JavaScript方法
- 3. 在不創建對象的情況下調用類的方法
- 4. CAAnimation鏈接情況下的內存使用情況
- 5. .NET運行時對象的內存佔用情況如何?
- 6. 使用靜態方法和實例方法的AS3對象內存使用情況
- 7. 將方法轉換爲靜態方法時的內存使用情況
- 8. Eclipse調試內存使用情況
- 9. 通過Boost的file_mapping和mapped_region最小化內存使用情況?
- 10. 通過getMemoryMXBean()和jvisualvm獲得內存使用情況的差異?
- 11. 如何計算對象的內存使用情況?
- 12. C#:一個對象的內存使用情況
- 13. 如何測量python中對象的內存使用情況?
- 14. JavaScript對象的內存使用情況和複雜性順序
- 15. Pympler獲取對象的內存使用情況
- 16. 計算Java中任何對象的總內存使用情況
- 17. ObjectiveC中指定對象的內存使用情況
- 18. 確定.NET中對象圖的內存使用情況
- 19. 如何在不通過WCF運行時堆棧的情況下調用wcf服務對象中的方法?
- 20. 嘗試調用空對象引用的接口方法'int android.database.Cursor.getCount()'
- 21. 如何在特定情況下使用接口創建對象
- 22. Java後門接口,或者通過調用對象限制方法訪問
- 23. 內存使用情況
- 24. iphone內存使用情況
- 25. Tcl_Format內存使用情況
- 26. Silverlight內存使用情況
- 27. IronPython內存使用情況
- 28. Java內存使用情況
- 29. V8內存使用情況
- 30. Listview內存使用情況
假設我有一個屬性類P,不包含數據僅成員方法定義一個C類。當我C的對象沒有分配給它的內存。 當我調用C的所有方法的對象的方法被加載到內存中。 但是當我通過調用函數的接口調用被加載到內存時... – vksh 2010-08-31 12:13:52
不太確定,只是一個假設 – vksh 2010-08-31 12:14:35
@vikesh - 接口不能被實例化。只有物體可以。當然,如果一個實現需要更少的內存,那麼如果使用它,則會使用更少的內存。 – Oded 2010-08-31 12:23:16