Java中的对象实例化是否存在每方法成本?

时间:2010-07-09 22:35:20

标签: java

我从另一位开发人员那里听说一个对象太昂贵而不能重复实例化,因为“它有很多方法。”

我的理解(主要来自Bloch)主要是通过在构造函数中明确完成的事情来创建对象,特别是创建其他昂贵的对象。

Java中的新对象是否存在每个方法的成本?我想不是,但是如果有人的话,我需要参考。

谢谢!

4 个答案:

答案 0 :(得分:11)

许多方法意味着很大virtual method table (VMT)。但是,VMT就像元数据一样每个类,因此在第一个实例化时最多只有一次性成本。假设构造函数没有做大量提升,后续实例化与具有较少方法的对象一样快。

值得一读也是关于object creation from the performance tuning book的章节。

答案 1 :(得分:3)

不,类的方法数量与JVM执行new操作的时间之间没有关系。

说真的,如果您正在考虑这种级别,那么您不应该使用像Java这样的语言,而是使用汇编程序或“C”编写应用程序。

事实上,您应该专注于算法和数据结构的设计,这些将对您的应用程序性能产生比任何潜在的微优化更深远的影响。

答案 2 :(得分:1)

另外,对于具有许多实例变量的类,会有轻微的性能损失(不确定它是否真的可以测量)。 Java要求为每个新实例将每个实例变量设置为0,false,null,并且将运行成本设置为零。然而,它可能只是一个快速完成的memset(或calloc或类似的东西)。

答案 3 :(得分:0)