2016-05-13 73 views
0

我有一个Java程序,可以执行许多小型数组操作。我已经运行它并验证它没有产生错误,但它比预期的要慢。我假设很多这种放缓与检查数组边界等有关。运行没有数组边界的边界检查,Cast检查等

是否有一种方法可以禁用所有错误检查,以便我可以更快地运行我的程序(存在风险,它只是崩溃,而不是生成可理解的错误)?

+3

它可以代替解释你的阵列正在试图解决它会更容易帮助你的problam。它或多或少从未建议尝试通过黑客手段来加快代码速度。几乎100%的时间,java编译器都会打败你的代码。 – Marthin

+3

你是怎么得出结论说问题是检查界限的?你有没有介绍你的申请?你是否认为边界检查是瓶颈? – RealSkeptic

回答

0

不,这是不可能的,因为这会在发生错误时破坏JVM。

2

不,这是不可能的。 Java语言规范描述了在什么情况下强制转换和数组访问会引发异常,但没有提到禁止这种行为的机制。

ClassCastException投掷在JLS Section 15.6描述:

  • 转换表达式(§15.16)如果铸造被发现是在运行时不允许抛出一个ClassCastException。

阵列边界检查在JLS Section 15.10.4描述:

在运行时,一个数组访问表达式的求值的行为如下:

  • 首先,数组引用表达是评估。如果此评估突然完成,则出于同样的原因,数组访问会突然完成,并且不评估索引表达式。

  • 否则,将评估索引表达式。如果此评估突然完成,则出于同样的原因阵列访问会突然完成。

  • 否则,如果数组引用表达式的值为null,则抛出NullPointerException。

  • 否则,数组引用表达式的值实际上是指数组。如果索引表达式的值小于零,或者大于或等于数组的长度,则引发ArrayIndexOutOfBoundsException

  • 否则,数组访问的结果是类型T的变量,在数组中,由索引表达式的值选择。