2012-02-29 56 views
3

這裏有一點閒置的好奇心。如果對象有很多方法,是否會在對象實例化時遇到性能問題?

基本上,如果我有一個只有幾個原始數據成員的對象,它佔用少量內存,並且不需要很長時間就可以創建。但是,如果我有很多與該對象關聯的方法會發生什麼?對象實例化是否必須考慮到這些?

例如,假設我有一個可以調用的不同方法的類(在此插入荒謬的大數)。與沒有方法的情況相比,JVM是否需要再創建該類的實例?

回答

6

否,Class與方法被一次存儲在單獨的存儲器位置(即PermGen)和一個給定的類的每個對象僅具有單個參考其類型(Class)。

因此,無論您的對象有多少個方法:兩到兩千個 - 對象創建將花費完全相同的時間量。

順便說一句,對於方法調用同樣適用 - 當調用具有大量對象的方法而不是隻有少數對象的方法時,性能沒有影響。

+0

甜,謝謝。我實際上正在想象它會是相反的。 – CodeBunny 2012-02-29 23:08:33

2

看到沒,我不相信有一個性能命中那將是可衡量的或物質給你。我會說不,並蔑視你或任何其他人回來與有意義的數據相反。

如果你的對象是大,我會說這是一次重構。

2

我不能說java,但在C++等非虛擬方法可以存儲爲全局函數(wth approriate name mangling),並且在實例化時不需要額外的空間。虛擬方法必須填充到VMT中,VMT可以在編譯時建立,並且在實例化時存儲在對象中的單個指針。

所以不,我沒有看到任何大量方法的命中。