在我的应用程序中,obj.getClass().isArray()
经常被调用,并成为应用程序的瓶颈。
我想在运行时有效地检查对象是否为数组。
原始数组和对象数组应返回true。
我可以想象的方式是对所有基本数组进行instanceof
编码,但无法处理int [] []之类的类型。该应用程序用作lib,因此我无法列出所有类型。
有什么线索吗?
最佳答案
我刚刚完成的基准测试得出以下结果:
{s instanceof Object[]} spends 44ms
{s.getClass().getName().charAt(0) == '['} spends 58ms
{s.getClass().isArray()} spends 303ms
使用Benchmark.java调用的Main.java完成了基准测试。
在上述基准测试中讨论了
final
变量的用法后,请使用本地变量查看新结果:{s instanceof Object[]} spends 83ms
{s.getClass().getName().charAt(0) == '['} spends 93ms
{s.getClass().isArray()} spends 354ms
即使持续时间都更长(有趣的是),它们的顺序也得以保留。
然后使用此新的Main.java调用Benchmark.java。
并使用其他Main.java调用的原始数组:
{a instanceof int[]} spends 71ms
{a.getClass().getName().charAt(0) == '['} spends 82ms
{a.getClass().isArray()} spends 340ms
结果顺序仍然相同。