Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JIT编译器是否删除方法';这是没有副作用的电话吗?_Java_Jit - Fatal编程技术网

Java JIT编译器是否删除方法';这是没有副作用的电话吗?

Java JIT编译器是否删除方法';这是没有副作用的电话吗?,java,jit,Java,Jit,我有一个简单的方法来检查输入字符串是否有效 private boolean isXpath(String value) { boolean isXpath = true; try { XPath xpath = XPathFactory.newInstance().newXPath(); xpath.compile(value); } catch (XPathExpressionException e) { isXpath

我有一个简单的方法来检查输入字符串是否有效

private boolean isXpath(String value) {
    boolean isXpath = true;
    try {
        XPath xpath = XPathFactory.newInstance().newXPath();
        xpath.compile(value);
    } catch (XPathExpressionException e) {
        isXpath = false;
    }
    return isXpath;
}

我可以确保JIT编译器不会删除
try
块中的代码,因为它没有副作用吗?或者它有(可能的例外)?

死代码消除不仅仅是关于副作用,还关于使用计算结果。由于您的方法返回的是
isXpath
,如果不执行
try
块,就无法导出它,因此JIT编译器不可能消除它。

死代码消除不仅涉及副作用,还涉及使用计算结果。由于您的方法返回的是
isXpath
,如果不执行
try
块,就无法导出它,因此JIT编译器不可能消除它。

如果要强制编译器不执行任何优化,请查看是否要强制编译器不执行任何优化,看,我不会说不可能:如果JIT内联线
XPathFactory.newInstance().newXPath()
,并且由于不断传播和类似的优化可以推断代码总是抛出异常或从不抛出异常,那么它可以将整个方法简化为
返回常量。在实践中,这是非常不可能的,因此称之为不可能是合理的,我同意。只有在假设没有字符串是有效的XPath或所有字符串都是有效的XPath的情况下,编译器才能证明这一点。显然不适用于这里。嗯,有一个调用站点使用字符串常量的边缘情况。然后理论上可以有效地记忆调用的返回值。我一直在考虑在其中传递say null,我假设这会抛出一个NRE。我不会说不可能:如果JIT内联线
XPathFactory.newInstance().newXPath()
由于不断传播和类似的优化可以推断代码总是抛出异常或从不抛出异常,因此可以将整个方法简化为
返回常量。在实践中,这是非常不可能的,因此称之为不可能是合理的,我同意。只有在假设没有字符串是有效的XPath或所有字符串都是有效的XPath的情况下,编译器才能证明这一点。显然不适用于这里。嗯,有一个调用站点使用字符串常量的边缘情况。然后理论上就可以有效地记忆调用的返回值了。我一直在考虑在其中传递say null,我假设这会抛出一个NRE。