1

제 질문은 당연하다고 생각합니다. 내가 사용하는 JVM이 다중 클래스 로더를 사용한다는 것을 결정하는 가장 빠르고 정확한 방법은 무엇입니까? 프로그램이 올바르게 실행되도록하려면 어떤주의를 기울여야합니까?실행중인 JVM이 여러 클래스 로더를 사용하고 있는지 여부를 어떻게 확인할 수 있습니까?

편집 : 두 클래스 로더가 동일한 클래스를로드 할 수 있다는 사실을 명확히해야한다고 생각합니다. 단일 인스턴스와 같은 클래스가 필요한 경우 어떻게해야할까요?

답변

2

프로그램이 올바르게 실행되도록하려면주의해야합니다.

내가 알고있는 것은 없습니다. 다른 응용 프로그램 자원 (이미지, 도움말 파일 등)의 경우 컨텍스트 클래스 로더를 사용하십시오.

1

질문에 어려움을 겪고 있습니다.

모든 JVM은 시스템 클래스 로더, 확장 클래스 로더 및 애플리케이션 클래스 로더와 같이 항상 여러 클래스 로더를 실행합니다. OSGi 등은 많은 것을 추가 할 수 있습니다.

나는 여기에서 어떤 문제라도보기 위해 고심하고있다. 클래스 로더의 모든 점이 네임 스페이스를 격리하고있다.

1

모든 JVM은 여러 클래스 로더를 사용합니다.

java -XX : + TraceClassLoading -version 2> & 1 | cut -d ''-f2 | 그렙 클래스 로더

인쇄

java.lang.ClassLoader 
sun.reflect.DelegatingClassLoader 
java.lang.ClassLoader$3 
java.lang.ClassLoader$NativeLibrary 
java.security.SecureClassLoader 
java.net.URLClassLoader 
sun.misc.Launcher$ExtClassLoader 
java.lang.ClassLoader$ParallelLoaders 
java.net.URLClassLoader$7 
sun.misc.Launcher$ExtClassLoader$1 
sun.misc.Launcher$AppClassLoader 
sun.misc.Launcher$AppClassLoader$1 
java.lang.SystemClassLoaderAction 

이들 중 일부는 내부 클래스이며, 일부는 서로를 확장하지만, 더 이상의 클래스 로더 여기가 내가했던 모두는 JVM의 버전을 요청했다.