我对关于确定对象类型的性能问题很感兴趣,并用两种确定方式编写了一些基准测试。
有人能解释一下为什么变体比用字符串切换类名的变体instanceof 快 350 倍吗?
代码:
class A {}
class B extends A {}
public class InstanceOfBenchmark {
public static final Object a = new A();
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public void testInstanceOf()
{
if (a instanceof B) {}
else if (a instanceof String) {}
else if (a instanceof ArrayList) {}
else if (a instanceof HashMap) {}
else if (a instanceof HashSet) {}
else if (a instanceof A);
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
public void testName() {
String class_name = …Run Code Online (Sandbox Code Playgroud) 哪种方式更好?
if ("Pablo".equals(name) || "Marko".equals(name) || .. );
Run Code Online (Sandbox Code Playgroud)
或者
if (Sets.newHashSet("Pablo", "Marko", ..).contains(name));
Run Code Online (Sandbox Code Playgroud)
对内存使用、性能、可读性感兴趣