Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java=Getter/Setter=这会增加吗;“对象大小”;运行时和访问时(CPU周期?)_Java_Performance - Fatal编程技术网

Java=Getter/Setter=这会增加吗;“对象大小”;运行时和访问时(CPU周期?)

Java=Getter/Setter=这会增加吗;“对象大小”;运行时和访问时(CPU周期?),java,performance,Java,Performance,我需要编写一个ajax应用程序,在服务器端(用java实现)将创建数百万个小对象并保存在内存中。通常我对任何对象都使用beanstyle(带有getter/setter) 我的问题是:在运行时,为实例化对象使用getter/setter方法与不使用getter/setter方法并直接访问字段/成员是否有区别(关于内存使用和访问CPU时间)?例如,如果使用getter/setter使一个对象更大,每个方法和实例的大小为5字节,那么这将大大增加数百万个对象的总数。与直接访问成员/变量(与cpu周期有

我需要编写一个ajax应用程序,在服务器端(用java实现)将创建数百万个小对象并保存在内存中。通常我对任何对象都使用beanstyle(带有getter/setter)

我的问题是:在运行时,为实例化对象使用getter/setter方法与不使用getter/setter方法并直接访问字段/成员是否有区别(关于内存使用和访问CPU时间)?例如,如果使用getter/setter使一个对象更大,每个方法和实例的大小为5字节,那么这将大大增加数百万个对象的总数。与直接访问成员/变量(与cpu周期有关)访问getter vers相同

public String myvartoaccess;

vs

private String myvartoaccces;
public String getMyvartoaccess();
非常感谢!
Jens

getter和setter不会影响内存使用。getter/setter的方法实现与
类一起存储,其中只有一个类(在给定的类加载器中)。实例仅存储对象的状态


关于性能,我怀疑调用简单的getter/setter会慢很多。我肯定会首先使用getter和setter实现,然后如果您发现它太慢,您可能会删除它们。早熟的优化毕竟是万恶之源。

Getter和setter方法不应该使对象变大,而应该使代表这些对象的类变大。使用getter和setter方法不太可能影响性能,特别是因为JVM应该对此进行优化。如果您关心性能或内存,那么您应该加载测试并评测应用程序。很可能你会在其他地方发现问题,我真的不太担心这一部分。

没有区别。JVM将优化getter,就像它是一个字段读取一样。

getter和setter将在类的大小上添加少量内容;但是,单个对象的大小将不受影响。因此,无论是单个对象还是一万个对象,该方法的内存开销都将只增加一次


至于CPU开销,将有一个小的开销;然而,这应该得到优化,可以忽略不计

是的,拉基是对的。使用此getter/setter访问此字段的各种库和工具带来了真正的价值。JVM很可能会内联简单的getter,因此不会有任何CPU开销。这有点晚了:但这种“过早优化是万恶之源”是误导性的。我认为过早地使用方法访问简单字段是过早的复杂化。在早期设计阶段忽视效率是不好的,因为以后的重新设计和努力可能会过高。这句话听起来不错,但没有什么实际价值:最糟糕的是老生常谈:第一次做对比以后使用调试器更好。。。。不需要调试器的程序员在现代代码基础上确实非常特殊。