在我的应用程序中,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

结果顺序仍然相同。

10-04 15:30