Tag: 优化

使用编译器的关联性有什么问题?

有时可以使用关联性来消除数据依赖性,我很好奇它可以提供多少帮助。 我很惊讶地发现,通过手动展开一个简单的循环,我在Java(build 1.7.0_51-b13)和C(gcc 4.4.3)中几乎可以获得4的加速因子 。 所以我要么做一些非常愚蠢的事情,要么编译器忽略了一个强大的工具。 我开始了 int a = 0; for (int i=0; i<N; ++i) a = M1 * a + t[i]; 它计算接近String.hashCode()东西(设置M1=31并使用char[] )。 计算非常简单,对于我的i5-2400 @ 3.10GHz(在Java和C中), t.length=1000大约需要1.2微秒。 观察到每两个步骤a乘以M2 = M1*M1并添加一些东西。 这导致了这段代码 int a = 0; for (int i=0; i<N; i+=2) { a = M2 * a + (M1 * t[i] + t[i+1]); // […]

如何快速确定是否在Java中重写了方法

如果我可以确定同一类中的另一个方法没有被覆盖,那么可以对我的一个方法应用可能的优化。 这只是一个小小的优化,所以反思是不可能的。 我是否应该创建一个受保护的方法来返回有问题的方法是否被覆盖,以便子类可以使它返回true?