2016-09-07 1 views
0

내가 입력 문자열이 유효한 XPath는이 있는지 확인하는 간단한 방법이Java JIT 컴파일러는 부작용없이 메서드의 호출을 제거합니까?

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 블록 내부에 코드를 제거하지 않을 것이라는 확신 할 수 있습니다, 그것은 부작용이없는의 때문에? 아니면 (예외가있을 수 있음)?

+0

컴파일러 _not_에서 최적화를 수행하도록하려면 [this] (http://stackoverflow.com/questions/5242405/how-to-make-sure-no-jvm-and-compiler- 최적화가 발생 함) – byxor

답변

5

Dead Code Eliminatino는 부작용뿐 아니라 계산 결과 사용에 관한 것입니다. 귀하의 메서드는 try 블록을 실행하지 않고 도출 할 수없는 isXpath을 반환하기 때문에 JIT 컴파일러는이를 제거 할 수 없습니다.

+0

나는 불가능하다고 말하지 않을 것입니다 : JIT 인라인 XPathFactory.newInstance(). newXPath()와 상수 전파 및 유사한 최적화로 인해 코드가 항상 예외를 던지거나 결코 생성하지 않는다고 추측 할 수 있다면, 그런 다음 전체 메소드를 단순화하여'CONST를 리턴한다. 실제로 그렇게 불가능하다고 부를만한 것은 그렇게 대단히 많지 않을 것입니다. – Voo

+0

유효한 XPath 또는 모든 문자열이 없다는 가정하에 컴파일러가이를 증명할 수 있습니다. 여기서는 분명히 적용 할 수 없습니다. –

+1

문자열 상수를 사용하는 호출 사이트의이 대소 문자가 _ _ 있습니다. 그러면 이론적으로 호출의 반환 값을 효과적으로 메모 할 수 있습니다. –

관련 문제