2011-08-04 72 views
2

我想使用的模板設計模式,所以我用抽象類定義是這樣我的算法:jvm從動態抽象類創建類對象是否昂貴?

abstract class MyTemplate 
{ 
    public void execute() 
    { 
     //... do something 
     doSomething(); 
    } 
    public abstract void doSomethig(); 
} 

在我的代碼,我將創建一個instanceof MyTemplate的每次是這樣的:

MyTemplate cleanUp = new MyTemplate() 
{ 

public void doSomething() 
{ 
// execute cleanup 
} 
} 
cleanUp.execute(); 

是爲JVM創建一個抽象類昂貴的對象?

感謝,

肖恩·阮

+0

你認爲對你的表現有什麼影響?這種模式與Java中始終使用的匿名內部類無異。 –

回答

4

你不是真的創建一個抽象類實例。您正在創建一個具體類的實例,它恰好在您的代碼中沒有由Java編譯器創建的名稱。

JVM並不真正知道或關心它 - 所以它只是創建一個恰好是抽象類的子類的任何其他類的實例。所以不要汗水:)

3

在內部,JVM具有Java編譯器爲您創建的即時創建匿名類新的.class文件實現了這個行爲,那麼實例化一個新的該類型的對象。因此,將新類加載到JVM中有一個(非常小的)一次性成本,但是從這一點開始,創建新對象的成本與創建任何其他對象的成本相同。

換句話說,不,這個代碼沒有引入很大的低效率。

6

不,編譯器會在編譯時生成一個匿名的內部類。實例化這個類的一個對象不會比任何其他類更昂貴。