【问题标题】:How to prevent dead code being optimized by JVM?如何防止死代码被JVM优化?
【发布时间】:2012-05-26 19:04:12
【问题描述】:
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 jpda


    【解决方案1】:

    例如,您可以在Marker 类的某处创建一个假的int 变量,并在start()end() 方法中增加/减少它的值。我不认为任何优化器都可以从类中删除实例字段,即使该值没有在任何地方使用。毕竟,总有人可以将新的代理代码注入 JVM 并要求其值。这意味着对 start()stop() 的调用也不应该得到优化。

    【讨论】:

    • 我做完实验后会告诉你结果的。我猜优化器会完全跳过 Marker.start() 的执行。
    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2017-08-10
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多