문제

오래된 프레임 워크에 대한 단위 테스트를 구현하려고합니다. 데이터베이스 계층을 조롱하려고합니다. 불행히도 우리의 프레임 워크는 약간 오래되었고 모범 사례를 사용하지 않으므로 우려가 명확하게 분리되지 않습니다. 데이터베이스 계층을 조롱하려고하면 JVM로드가 사용되지 않는 수많은 클래스가 될 수 있다고 걱정합니다.

나는 클래스 로더를 잘 이해하지 못하므로 문제가되지 않을 수 있습니다. 특정 클래스 로더가 후드 아래에서 무슨 일이 일어나고 있는지 증명하기 위해로드 한 모든 클래스에서 최고점을 차지할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

사용하는 경고를 받으십시오

java -verbose

엄청난 양의 출력을 생성합니다. 출력을 파일에 로그인 한 다음 grep을 사용하십시오. '티'필터가 있으면 다음을 시도 할 수 있습니다.

java -verbose | tee classloader.log
grep class classloader.log

다른 팁

자신만의 클래스 로더를 만들어 단위 테스트 중에로드하는 데 사용할 수 있습니다. 자신의 커스텀 클래스 로더가 무엇을하고 있는지 인쇄하도록하십시오.

또는 어떤 클래스가로드되었는지 알고 싶다면 다음을 수행하십시오.

java -verbose:class

확실하지 않습니다. 그러나 내가 할 수있는 한 가지 방법이 있습니다. 그래도 어리석은 일입니다. 측면을 시도하고로드 클래스에 대한 포인트 컷을 넣을 수 있습니다. 또한 JVM 논쟁 일 수도 있습니다 -말 수가 많은 도움이 될 수도 있습니다.

대안적인 방법으로 언급 한 바와 같이 특정 클래스 로더의 경우이 코드 스 니펫을 사용할 수 있습니다. 원하는 경우 OBJ 변수의 값을 변경하십시오.

Object obj = this;
ClassLoader classLoader = obj.getClass().getClassLoader();
File file = new File("classloderClasses.txt");
if (file.exists()) {
    file.delete();
}
if (classLoader != null) {
    try {
        Class clClass = classLoader.getClass();
        while (clClass != ClassLoader.class) {
            clClass = clClass.getSuperclass();
        }
        java.lang.reflect.Field classesField = clClass.getDeclaredField("classes");
        classesField.setAccessible(true);
        Vector classes = (Vector) classesField.get(classLoader);
        FileOutputStream fos = new FileOutputStream("classloderClasses.txt", true);
        fos.write(("******************** " + classLoader.toString() + " ******************** " + "\n").getBytes());
        fos.write(Arrays.toString(classes.toArray()).getBytes());
        fos.close();
    } catch (Exception exception) {
        exception.printStackTrace();
        // TODO
    }
}

당신은 사용합니다 -Xlog JVM (Java Virtual Machine) Unified Logging Framework로 로깅을 구성하거나 활성화하는 옵션. 장점은 텍스트 파일에 결과를 쓸 수 있다는 것입니다.

개요

-Xlog[:[what][:[output][:[decorators][:output-options [,...]]]]]

Unified Logging Syntax에서 -verbose:class 동등합니다 -Xlog:class+load=info

예를 들어

java -Xlog:class+load=info:classloaded.txt

Ocarle Doc

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top