如果类都包含许多有用的类变量,它会对性能产生影响吗?

tom*_*101 7 java variables performance class

每当我写一个新类时,我都会使用相当多的类变量来描述类的属性,直到我回去查看我输入的代码时,我看到40到50个类变量,无论是什么无论它们是公共的,受保护的还是私有的,它们都在我定义的类中占据显着位置.

虽然,类变量主要由原始变量组成,如布尔值,整数,双精度等,但我仍然有这种不安的感觉,我的一些类具有大量的类变量可能对性能产生影响,但是它们可以忽略不计也许.

但是尽可能合理,如果我考虑无限的RAM大小和无限的Java类变量,Java类可能是RAM中无限大的内存块,其中块的第一部分包含类变量分区,其余部分该块包含Java类中的类方法的地址.有了这么多的RAM,它的性能非常重要.

但上述情况并没有让我的感受变得容易.如果我们考虑有限的RAM但是无限的Java类变量,结果会是什么?在性能重要的环境中会发生什么?

并且可能事先可能会提到,我不知道是否有很多类变量被认为是糟糕的Java实践,当它们都很重要时,所有类都被重构了.

提前致谢.

JB *_*zet 19

性能与对象具有的字段数无关.内存消耗当然可能会受到影响,但如果需要变量,则无法对其进行太多操作.不要过分担心性能问题.使您的代码简单,易读,可维护,经过测试.然后,如果您发现性能问题,请测量并分析它们的来源,并根据需要进行优化.

可维护性和可读性受到对象具有的字段数的影响.40到50个字段是相当多的字段,可能表明你的课程本身做得太多,并且责任太多.将它们重构为许多较小的子类,并使用组合可能是个好主意.

  • +1`可维护性和可读性'几乎总是比性能更重要.事实上,我认为干净,简单,维护良好的代码通常表现良好,如果不是最快的话. (4认同)
  • JB从GC的角度来看它.我在一个交易平台上工作,有时我们不得不将大量字段放入一个类中,以减少次要GC所花费的时间(我们使用CMS收集器). (3认同)

Aug*_*sto 5

我希望我听起来不像是一个屁股,但在我看来,一个类中有超过10个属性通常是一个糟糕的设计,需要证明理由.

性能方面,如果你经常需要所有这些属性,那么你将节省一些内存,因为每个对象也有一个标题.因此,你将5-10个类放入一个并保存一些字节.

根据您使用的垃圾收集器,分配较大的对象可能会更加昂贵(CMS垃圾收集器也是如此,但对于并行垃圾收集器则不然).更多GC工作=减少您的应用运行的时间.

除非您正在编写高流量,低延迟的应用程序,否则更少的类(以及使用更少的内存)的好处将完全被维护所需的额外工作所淹没.

  • +1我没有看到类设计与数据库设计有很大不同.有时它是好的,甚至更喜欢让一个类有点膨胀(db类比的第二和第一范式),特别是如果类在要求范围的脊上. (2认同)