【问题标题】:Is there a performance hit upon object instantation if the object has many methods?对象的对象实例化有很多方法吗?
【发布时间】:2012-03-19 11:07:29
【问题描述】:
这里只是有点无聊的好奇心。
基本上,如果我有一个只有几个原始数据成员的对象,它会占用少量内存,而且创建起来根本不需要很长时间。但是,如果我有很多与该对象关联的方法,会发生什么?对象实例化是否必须将这些考虑在内?
例如,假设我有一个类(在此处插入非常大的数字)我可以调用的不同方法数量。与我没有方法相比,JVM 是否需要更长的时间来创建该类的实例?
【问题讨论】:
标签:
java
performance
oop
methods
objectinstantiation
【解决方案1】:
我不能代表 java,但在 C++ 等中,非虚拟方法可以存储为全局函数(带有适当的名称修饰),并且在实例化时不需要额外的空间。虚拟方法必须填充到 VMT 中,这可能可以在编译时构建,并在实例化时将单个指针存储在对象中。
所以不,我没有看到大量方法的任何影响。
【解决方案2】:
不,我认为性能影响不会是可衡量的或对您来说很重要。我会说不,并无视您或其他任何人返回有意义的数据。
如果你的对象那么那么大,我会说是时候重构了。
【解决方案3】:
不,带有方法的Class 会在单独的内存位置(即PermGen)存储一次,并且给定类的每个对象只有一个对其类型的引用(Class)。
因此,您的对象有多少方法并不重要:两两千 - 对象创建将花费完全相同的时间。
顺便说一句,方法调用也是如此 - 与只有很少的对象相比,调用具有大量方法的对象的方法时不会影响性能。
另见