標準のSun1.6コンパイラとJRE/JITを使用して、Duff's Deviceに例示されているような大規模な展開を使用して、ループを展開することをお勧めしますか?それとも、パフォーマンス上の利点がなく、コードが難読化されてしまうのでしょうか。
私が使用したJavaプロファイリングツールは、たとえばvalgrindよりも行ごとのCPU使用率についての情報が少ないため、他の人の経験で測定を強化することを検討していました。
もちろん、 Duff's Deviceを正確にコーディングすることはできませんが、基本的な展開を行うことはできます。それが私が疑問に思っていることです。
short stateType = data.getShort(ptr);
switch (stateType) {
case SEARCH_TYPE_DISPATCH + 16:
if (c > data.getChar(ptr + (3 << 16) - 4)) {
ptr += 3 << 16;
}
case SEARCH_TYPE_DISPATCH + 15:
if (c > data.getChar(ptr + (3 << 15) - 4)) {
ptr += 3 << 15;
}
...
他の多くの値を下に移動します。