运行Java时不进行数组边界检查、强制转换检查等

运行Java时不进行数组边界检查、强制转换检查等,java,optimization,profiling,Java,Optimization,Profiling,我有一个Java程序,可以执行许多小数组操作。我已经运行了它,并验证了它不会产生错误,但速度比预期的慢。我假设这种减速很大程度上与检查数组边界等有关 是否有一种方法可以禁用所有错误检查,以便我可以更快地运行我的程序(冒着程序崩溃的风险,而不是生成可理解的错误)?否这是不可能的,因为这样会在出错时破坏JVM。否,这是不可能的,因为这样会在出错时破坏JVM。否,这是不可能的。Java语言规范描述了强制转换和数组访问抛出异常的情况,但没有提到禁用此行为的机制 抛出ClassCastException的

我有一个Java程序,可以执行许多小数组操作。我已经运行了它,并验证了它不会产生错误,但速度比预期的慢。我假设这种减速很大程度上与检查数组边界等有关


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

否这是不可能的,因为这样会在出错时破坏JVM。

否,这是不可能的,因为这样会在出错时破坏JVM。

否,这是不可能的。Java语言规范描述了强制转换和数组访问抛出异常的情况,但没有提到禁用此行为的机制

抛出
ClassCastException
的描述如下:

  • 如果在运行时发现强制转换是不允许的,则强制转换表达式(§15.16)将抛出ClassCastException
数组边界检查如中所述:

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

  • 首先,对数组引用表达式求值。如果此计算突然完成,则阵列访问也会因为相同的原因突然完成,并且不会计算索引表达式

  • 否则,将计算索引表达式。如果此计算突然完成,则阵列访问也会因为相同的原因突然完成

  • 否则,如果数组引用表达式的值为null,则会引发NullPointerException

  • 否则,数组引用表达式的值确实引用数组。如果索引表达式的值小于零,或大于或等于数组的长度,则抛出
    ArrayIndexOutOfBoundsException

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


不,这是不可能的。Java语言规范描述了强制转换和数组访问抛出异常的情况,但没有提到禁用此行为的机制

抛出
ClassCastException
的描述如下:

  • 如果在运行时发现强制转换是不允许的,则强制转换表达式(§15.16)将抛出ClassCastException
数组边界检查如中所述:

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

  • 首先,对数组引用表达式求值。如果此计算突然完成,则阵列访问也会因为相同的原因突然完成,并且不会计算索引表达式

  • 否则,将计算索引表达式。如果此计算突然完成,则阵列访问也会因为相同的原因突然完成

  • 否则,如果数组引用表达式的值为null,则会引发NullPointerException

  • 否则,数组引用表达式的值确实引用数组。如果索引表达式的值小于零,或大于或等于数组的长度,则抛出
    ArrayIndexOutOfBoundsException

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


如果你能解释一下你的阵列试图解决的问题,那么帮助你就容易多了。或多或少,我们都不建议通过黑客来提高代码的速度。java编译器在几乎100%的时间里都会击败你的代码。你是如何得出这个问题是边界检查的结论的?你有介绍你的申请吗?您是否将边界检查确定为瓶颈?您可以解释您的阵列试图解决的问题,这样会更容易帮助您解决问题。或多或少,我们都不建议通过黑客来提高代码的速度。java编译器在几乎100%的时间里都会击败你的代码。你是如何得出这个问题是边界检查的结论的?你有介绍你的申请吗?您是否将边界检查确定为瓶颈?