2011-08-04 98 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

不,编译器会在编译时生成一个匿名的内部类。实例化这个类的一个对象不会比任何其他类更昂贵。