2012-05-26 4 views
0
public class A 
{ 
    public String getText() 
    { 
     Marker.start(); 
     ... 
     ... 
     Marker.end(); 
    } 
} 

public class Marker 
{ 
    public static void start() 
    { 
     long now = System.currentTimeMillis; 
    } 

    public static void end() 
    { 
     long now = System.currentTimeMillis; 
    } 
} 

JPDA (Java Platform Debugger Architecture)를 사용하여 Marker.start() 및 Marker.end()의 발생을 외부 응용 프로그램에서 감지하려고합니다. 그러나 나는 코드가 JVM에 의해 최적화/제거 될 것이라고 생각한다. 어떻게 죽은 코드가 JVM에 의해 최적화되는 것을 막는가?데드 코드가 JVM에 의해 최적화되는 것을 방지하려면 어떻게해야합니까?

답변

0

당신은 예를 들어/클래스 Marker 및 증가 어딘가에 가짜 int 변수를 만들 start()end() 방법에서 그 값을 감소 할 수있다. 어떤 옵티마이 저는 값이 어디에도 사용되지 않아도 클래스에서 인스턴스 필드를 제거 할 수 있다고 생각하지 않습니다. 결국, 누군가는 항상 새로운 에이전트 코드를 JVM에 주입하고 그 값을 요구할 수 있습니다. 이는 start()stop()에 대한 호출이 최적화되지 않아야 함을 의미합니다.

+0

실험을 마친 후에 결과를 알려 드리겠습니다. 옵티마이 저가 Marker.start()의 실행을 완전히 건너 뛸 것이라고 생각합니다. – janetsmith