Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 使用ASM检测可能的同步死锁_Java_Deadlock_Bytecode - Fatal编程技术网

Java 使用ASM检测可能的同步死锁

Java 使用ASM检测可能的同步死锁,java,deadlock,bytecode,Java,Deadlock,Bytecode,考虑下面的代码片段 synchronized (A.class) { foo(); synchronized (B.class) { bar(); } } 和另一个A和B互换的代码。这可能会导致死锁,我正在尝试使用ASM检测这一点(特别是,我只检测A、B是否是我知道不应该同步的类,例如异常)。目前,我有一个使用简化器的分析器。使用它,我可以获得堆栈顶部的BasicValue并获得它的类型,但是在代码示例中,内部名称是java/lang/Class,它不能告诉我它是哪个类。我

考虑下面的代码片段

synchronized (A.class) {
  foo();
  synchronized (B.class) {
    bar();
  }
}

和另一个A和B互换的代码。这可能会导致死锁,我正在尝试使用ASM检测这一点(特别是,我只检测A、B是否是我知道不应该同步的类,例如异常)。目前,我有一个使用简化器的分析器。使用它,我可以获得堆栈顶部的BasicValue并获得它的类型,但是在代码示例中,内部名称是java/lang/Class,它不能告诉我它是哪个类。我似乎找不到一个简单的方法来确定这个类代表哪个类。非常感谢您的帮助。谢谢

您必须使用ASM跟踪价值的来源,然后评估自己价值是什么


PS:顺便说一句,在类上同步是个坏主意…

你是在看静态分析还是动态分析?他甚至可能想编写自己的解释器,在更高级别的抽象(例如聚合表达式)上进行操作。