3

这里只是有点闲散的好奇心。

基本上,如果我有一个只有几个原始数据成员的对象,它会占用少量内存,而且创建起来根本不需要很长时间。但是,如果我有很多与该对象关联的方法会发生什么?对象实例化是否必须考虑这些?

例如,假设我有一个类(在此处插入非常大的数字)我可以调用的不同方法的数量。与我没有方法相比,JVM 是否需要更长的时间来创建该类的实例?

4

3 回答 3

6

不,Classwith 方法在单独的内存位置(即PermGen)中存储一次,并且给定类的每个对象只有一个对其类型的引用(Class)。

因此,您的对象有多少方法并不重要:两两千 - 对象创建将花费完全相同的时间。

顺便说一句,方法调用也是如此——与只有很少的对象相比,调用具有大量方法的对象的方法时不会影响性能。

也可以看看

于 2012-02-29T23:01:15.360 回答
2

不,我不相信会有可衡量的或对您而言重要的性能影响。我会说不,并无视您或其他任何人返回有意义的数据相反。

如果你的对象那么大,我会说是时候重构了。

于 2012-02-29T23:01:44.450 回答
2

我不能代表 java,但在 C++ 等中,非虚拟方法可以存储为全局函数(带有适当的名称修饰),并且在实例化时不需要额外的空间。必须将虚拟方法填充到 VMT 中,这可能可以在编译时构建,并且在实例化时将单个指针存储在对象中。

所以不,我没有看到大量方法受到任何影响。

于 2012-02-29T23:01:52.833 回答