未为JarInputStream终结器触发字节人规则

时间:2018-09-10 17:15:53

标签: java finalizer

我的目标是使用Byteman来跟踪涉及JarInputStream类的可能的资源泄漏,但是我很难使它在简单的测试方案中工作。 (我试图让规则在调用JarInputStream finalize方法然后在此基础上建立时触发。)

这是我的考试班:

package so.example;

import java.io.IOException;
import java.util.jar.JarInputStream;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        new JarInputStream(Main.class.getResourceAsStream("Main.class"));
        System.gc();
        Thread.sleep(500);
    }
}

这是我的Byteman脚本:

RULE trace finalize
CLASS ^java.lang.Object
METHOD finalize
IF TRUE
DO System.out.println("Finalizing " + $0)
ENDRULE

我这样执行:

java -Dorg.jboss.byteman.transform.all -javaagent:${BYTEMAN_HOME}/lib/byteman.jar=script:so.btm,boot:${BYTEMAN_HOME}/lib/byteman.jar so.example.Main

这是我得到的输出,表明该规则正在其他类上触发

Finalizing Socket[addr=null,port=0,localport=0]
Finalizing Socket[addr=null,port=0,localport=0]

我也尝试了其他类,并且奏效了。我还尝试过创建100万个JarInputStream实例,并多次调用System.gc()(等待时间更长)的方法,但是由于某种原因,我无法为该类触发规则。

0 个答案:

没有答案