2017-01-24 1 views
1

ext 폴더에 다른 버전의 jar가 있다고 가정하고 다른 버전은 classpath입니다. 항아리가로드 될 버전은 무엇입니까? 내 연구에 따르면 extension classloaderclasspath보다 먼저 실행되므로 확장 프로그램의 라이브러리가로드됩니다. 또는 classpath으로 우선 적용됩니다. 버전이 동일하면 어떻게 될까요?JVM에로드 할 항아리는 무엇입니까?

답변

1

ClassLoader의 계층에서 찾을 수있는 첫 번째 클래스를 사용합니다. 부트 스트랩 ClassLoader이 (jre/librt.jar 및 여러 가지 다른 중요한 jar 파일)을 부트 스트랩 클래스의를 구성

  1. :

    그래서 ClassLoader의의 다음 순서에서 클래스를 얻기 위해 노력할 것입니다 .

  2. 확장 ClassLoader확장 클래스 (확장 폴더 jre/lib/extjar의 파일)로 구성.
  3. ClassLoader사용자 클래스 (클래스 경로에 정의 된 클래스가 정의 됨)로 구성됩니다.

클래스가 # 1에서 # 2 및 # 3으로 정의되지 않았으므로 찾을 수있는 첫 번째 클래스는 # 2에 있으므로 확장 폴더의 버전이 표시되고 무시됩니다 나중에 classpath에 정의 된 클래스.

그것은 클래스 레벨이 아닌 항아리 수준이 될 것이다 또한 How Classes are Found

1

참조하십시오. 클래스 (정규화 된 클래스 이름)가 이미 VM에로드 된 경우 ext 또는 클래스 경로 libs 클래스의 새 클래스는 무시됩니다.

관련 문제