2012-05-26 52 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平臺調試器體系結構)從外部應用程序中檢測Marker.start()和Marker.end()的發生。不過,我認爲這些代碼可能會被JVM優化/消除。如何防止死代碼被JVM優化?如何防止死代碼被JVM優化?

回答

0

例如,你可以在類Marker和增量的地方創建一個假int變量/在start()end()方法減少它的價值。我不認爲任何優化器都可以從類中移除實例字段,即使該值沒有在任何地方使用。畢竟,有人總是可以將新的代理代碼注入JVM並詢問其價值。這意味着對start()stop()的呼叫也不應該被優化。

+0

完成實驗後,我會讓你知道結果。我想優化器會完全跳過Marker.start()的執行。 – janetsmith