2012-02-29 54 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可以在编译时建立,并且在实例化时存储在对象中的单个指针。

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