jvm在动态中从抽象类创建类对象是否昂贵?

时间:2011-08-04 21:55:00

标签: java

我正在尝试使用模板设计模式,所以我使用抽象类来定义我的算法:

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

在我的代码中,我每次都会创建一个MyTemplate实例:

MyTemplate cleanUp = new MyTemplate()
{

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

为JVM创建一个昂贵的抽象类对象?

谢谢,

Sean Nguyen

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

你并没有真正创建一个抽象类实例。您正在创建一个具体类的实例,该实例在代码中没有名称,由Java编译器创建。

JVM并不真正了解或关心它 - 因此它只是创建一个恰好是抽象类的子类的任何其他类的实例。所以不要冒汗吧。)

答案 2 :(得分:3)

在内部,JVM通过让Java编译器为您即时创建的匿名类创建新的.class文件,然后实例化该类型的新对象来实现此行为。因此,将新类加载到JVM中需要(非常小的)一次性成本,但从那时起,创建新对象的成本与创建任何其他对象的成本相同。

换句话说,不,这段代码没有引入很大的低效率。