我需要确定是否InetSocketAddress有效地使用IPv6或IPv4.我能看到的唯一两种方法是使用instanceof运算符,或者检查getAddress()(应该返回a byte[])的长度.这两个都不太理想(instanceof很慢,并且getAddress必须制作数组的副本).
还有更好的选择吗?
我不认为你会找到比 更快的东西instanceof。在这种特殊情况下,我希望 JIT 编译器能够优化它来加载和比较一对指针;即大约5条机器指令。
但即使比instanceof我理解的要慢得多,它也不太可能对应用程序的整体性能产生重大影响。
我建议您只使用它,并且只有在您有确凿的证据表明此时存在瓶颈instanceof时才需要对其进行优化;例如,根据实际工作负载分析您的应用程序的证据1。
1 - 完成此操作后,使用两个或多个版本的 IPv4 与 IPv6 测试运行/重新运行基准测试并测量哪个更快应该是一件简单的事情。
小智 6
更快的解决方案是比较类型。Inet4Address 和 Inet6Address 类型是最终类型,因此不能对它们进行子类化。
Inet4Address.class == IPtoCheck.getClass();
Inet6Address.class == IPtoCheck.getClass();
Run Code Online (Sandbox Code Playgroud)
测试表明,这比instanceof快两倍多,并且不受比较类型的影响,而instanceof在Inet4和Inet6地址上的性能是不同的。
| 归档时间: |
|
| 查看次数: |
5773 次 |
| 最近记录: |