Java 即使是很小的任务,也能有这么多的方法吗?

Java 即使是很小的任务,也能有这么多的方法吗?,java,jakarta-ee,Java,Jakarta Ee,我想知道的是,许多开发人员做了与减少长方法大小相同的事情,他们为相同的任务从长方法创建了许多小方法。我想知道它是否会影响应用程序的性能?在一般情况下,这是不可能的,但可能不会 首先,方法调用非常非常快 另一方面,JVM监视代码完成的工作,当它看到“热点”(代码中经常运行的部分)时,它会积极地优化代码中的这部分。它实现这一点的方法之一是尽可能地内联方法——也就是说,将代码从方法重新定位到调用它的方法中。在这一点上,性能与您自己将代码放在那里的性能相同。因此,您可以从小型方法中获得维护和可测试性方面

我想知道的是,许多开发人员做了与减少长方法大小相同的事情,他们为相同的任务从长方法创建了许多小方法。我想知道它是否会影响应用程序的性能?

在一般情况下,这是不可能的,但可能不会

首先,方法调用非常非常快

另一方面,JVM监视代码完成的工作,当它看到“热点”(代码中经常运行的部分)时,它会积极地优化代码中的这部分。它实现这一点的方法之一是尽可能地内联方法——也就是说,将代码从方法重新定位到调用它的方法中。在这一点上,性能与您自己将代码放在那里的性能相同。因此,您可以从小型方法中获得维护和可测试性方面的好处,但是内联代码的好处是如果内联代码有用的话


不过,在一般情况下,这一点也无法得到回答。如果您有一个特定的性能问题,请查看它在特定情况下是否重要。

在一般情况下无法确定,但可能不确定

首先,方法调用非常非常快

另一方面,JVM监视代码完成的工作,当它看到“热点”(代码中经常运行的部分)时,它会积极地优化代码中的这部分。它实现这一点的方法之一是尽可能地内联方法——也就是说,将代码从方法重新定位到调用它的方法中。在这一点上,性能与您自己将代码放在那里的性能相同。因此,您可以从小型方法中获得维护和可测试性方面的好处,但是内联代码的好处是如果内联代码有用的话


不过,在一般情况下,这一点也无法得到回答。如果你有一个特定的性能问题,看看它在特定情况下是否重要。

函数通常应该很短,在5-15行之间是我个人在用Java或C编写代码时的“经验法则”。这是一个很好的尺寸,有几个原因:

  • 无需滚动即可轻松安装在屏幕上
  • 这是关于你能在头脑中保持的概念尺寸
  • 它本身就需要一个函数(作为 独立的、有意义的逻辑块)
  • 小于5行的函数暗示您可能 过多地分解代码(这会使代码更难阅读/ 了解是否需要在功能之间导航)。或者 你忘记了你的特殊情况/错误处理
但我不认为设定一个绝对规则是有帮助的,因为总会有有效的例外/理由偏离规则:

  • 执行类型转换的单行访问器函数显然是 在某些情况下是可以接受的
  • 有一些非常简短但有用的函数(例如,swap as 用户提及(未知),显然需要少于5行。不是 重要的是,一些3行函数不会对代码库造成任何伤害
  • 作为单个大型switch语句的100行函数可能是 如果非常清楚正在做什么,则可以接受。这个代码可以 在概念上要非常简单,即使它需要很多行来完成 描述不同的案例。有时有人建议这样做 应重构为单独的类,并使用 继承/多态性,但我认为这将OOP带得太远了-我认为 与其使用40个新类,不如使用一个大的40路switch语句 处理
  • 一个复杂的函数可能有很多状态变量 如果在不同的函数之间作为参数传递,则会非常混乱。在里面 在这种情况下,您可以合理地证明代码是正确的 如果你把所有的东西都放在一个大的盒子里,那就更简单,也更容易理解 功能(尽管正如Mark正确指出的,这也可能是 转换为类以封装逻辑和 (州)
  • 有时较小或较大的函数具有性能优势 (可能是因为Frank提到的内联或JIT原因)。这 是高度依赖于实现的,但它可以带来不同- 确保你的基准
因此,基本上,使用常识,在大多数情况下都坚持使用较小的函数大小,但如果你有一个真正好的理由来创建一个异常大的函数,就不要武断


摘自。

函数通常应该很短,在Java或C#中编码时,5-15行是我个人的“经验法则”。这是一个很好的尺寸,有几个原因:

  • 无需滚动即可轻松安装在屏幕上
  • 这是关于你能在头脑中保持的概念尺寸
  • 它本身就需要一个函数(作为 独立的、有意义的逻辑块)
  • 小于5行的函数暗示您可能 过多地分解代码(这会使代码更难阅读/ 了解是否需要在功能之间导航)。或者 你忘记了你的特殊情况/错误处理
但我不认为设定一个绝对规则是有帮助的,因为总会有有效的例外/理由偏离规则:

  • 执行类型转换的单行访问器函数显然是 在某些情况下是可以接受的
  • 有一些非常简短但有用的函数(例如,swap as 用户提及(未知),显然需要少于5行。不是 重要的是,一些3行函数不会对代码库造成任何伤害
  • 作为单个大型switch语句的100行函数可能是 如果非常清楚正在做什么,则可以接受。这个代码可以 在概念上要非常简单,即使它需要很多行来完成 描述不同的案例。有时有人建议这样做 应该是重构