【发布时间】:2020-08-03 10:28:34
【问题描述】:
我正在尝试从一段看起来像这样的代码中获得最大性能
interface DbStream {
void writeInt(int x);
void writeString(String s);
// etc, somewhere around 20 different types
}
interface Writer {
void write(DbStream stream, Object value);
}
Writer[] writers = new Writer[NUM_COLS];
DbStream stream;
Object[][] src = new Object[NUM_ROWS][NUM_COLS];
for (int row = 0; row < NUM_ROWS; row++) {
for(int col = 0; col < NUM_COLS; col++) {
writers[col].write(stream, src[row][col]);
}
}
Writer 接口的每个实现都进行必要的转换并调用DbStream 的正确方法。该代码使用继承,因此这些调用不是内联的。如果手动展开内部循环以包含对静态方法的 200-300 次调用,是否会提高性能?如果有任何不同,该程序将使用 JDK 13。
【问题讨论】:
-
您是否验证过您的程序受 CPU 限制?乍一看,你好像在做很多 IO,我希望这会成为瓶颈。我不希望展开循环会产生任何影响。使用分析器查看时间的去向。
-
过早优化是万恶之源。
-
“代码使用继承,所以这些调用没有内联。”——你真的验证了这个说法吗?