运行Java而不进行数组边界检查,投射检查等

时间:2016-05-13 12:05:33

标签: java optimization profiling

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

有没有办法禁用所有错误检查,以便我可以更快地运行我的程序(有可能它崩溃,而不是产生可理解的错误)?

2 个答案:

答案 0 :(得分:2)

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

JLS Section 15.6中描述了ClassCastException的投掷:

  
      
  • 如果在运行时发现强制转换,则强制转换表达式(第15.16节)会抛出ClassCastException。
  •   

JLS Section 15.10.4

中描述了数组边界检查
  

在运行时,对数组访问表达式的评估表现如下:

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

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

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

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

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

  •   

答案 1 :(得分:0)

不可能这不可能,因为如果出现错误,这会破坏JVM。