【发布时间】:2017-12-07 22:22:34
【问题描述】:
分析应用程序中一些预先存在的第三方Java 代码(无法重写),我发现它几乎完全是由长方法链构成的,形式为
public Object process() {
// Do some class-specific stuff
return this.getChild().process();
}
其中有一个定义process() 方法的基类,由重新定义该方法的子类继承,并且在最后重复getChild() 调用。
由于条件块,在运行时会创建(分支)多个此类链,其中一些可能会相对较早地返回(例如,在链中的 10-20 个“链接”之后),但最常见的是“长度”在返回结果之前,链的数量要大得多,甚至可以超过 100 次连续的方法调用。
应用程序使用此代码处理大文件,每次调用顶级方法时结果都会发生变化,通常每个文件的每个不同行都会发生一次。
那么,两个问题:
- 与“常规”设计相比,这种设计对性能有何影响?
- 是否有任何技巧可以显着提高该代码的性能(例如,通过更改某些 JVM 参数)?
【问题讨论】:
-
为什么你认为这是一个性能问题?您是否有分析数据来支持您的担忧?什么是“常规”架构?完全不清楚你在这里问什么。
-
“常规”是指具有短方法链的架构。问题是关于评估任何性能影响。如果共识结果是“预计不会影响性能”,那就这样吧。
-
没有“长方法链”和“短方法链”之分,无论哪种方式,您都可以获得深度调用堆栈。由于调用深度而担心性能可能是浪费时间,除非您已经对系统进行了概要分析并确定了瓶颈。
标签: java optimization methods chaining