2016-06-18 13 views
-1

편집 :클래스 로더 계층을 사용하면 어떤 이점이 있습니까?

jdk의 jre/lib 폴더에 모든 jar 파일을 덤프하고 BootstrapClassLoader를 유일한 클래스 로더로 사용할 수 있습니까?

+0

무엇이 문제인지 완전히 불분명합니다. 네가 가진 사실을 가르쳐 주려고 했니? 질문에 답할 수있는 모든 사람들을 위해 질문을 편집하십시오. –

+0

의견에 감사드립니다. 나는 그 질문을 편집했다. –

+0

부트 스트랩 클래스 로더와 시스템 클래스 로더가 구별되는 이유를 알고 싶습니까? 아니면 시스템 클래스 로더 외에 다른 클래스 로더가있을 수 있습니까? – the8472

답변

0

각 프로젝트에는 서로 다른 일련의 종속성 및 다른 버전이 있습니다. 클래스 로더는 클래스의 다른 버전을 멋지게 처리 할 수 ​​없다. 이름으로 클래스의 첫 번째 클래스를 가져온다. (예 : com.example.MyClass (적어도 모든 것이 JDK 9에서 모듈화 될 때까지). 각 프로젝트는 공통 경로 대신 다른 경로에서 클래스를로드합니다. 예를 들어 maven 프로젝트는 $ HOME/.m2/repository에서 종속성을로드합니다.

+0

답변 해 주셔서 감사합니다. 하지만 왜 다른 버전의 의존성이 필요할까요? –

+0

머신에는 일반적으로 여러 Java 프로그램이 있습니다 (C/Python/Perl/Ruby 프로그램이 여러 개있는 것처럼). 이들은 각각 로깅 라이브러리와 같은 서로 다른 버전의 종속성을 가질 수 있습니다. – Salil

1

부트 스트랩 클래스 로더는 URL ClassLoader를 추가하면 추가 JAR/디렉토리를로드 할 수 있지만 패키지에 내장되어있을 수는 없으므로 JVM이 해킹되지 않습니다.

In 짧은 최소 2, 시스템 클래스 로더 및 사용자 ' 클래스 로더.

+0

@ Peter- 우리는 자체 클래스 로더를 생성하고 loadClass 메소드를 오버라이드 할 수 있습니다. 그렇게하는 동안 위임 모델을 구현할 필요가 없으며 커스텀 클래스 로더는 부트 스트랩 클래스 로더에 의해로드 된 클래스를로드 할 수 있습니다. –

+0

@RahulMathur는 당신을 실망시키지 않을 것이지만, 시도 할 수는 있습니다. –

+0

JVM이 나를 어떻게 막을 것입니까? 클래스 이름이 목록의 항목과 일치하면 lib/ext에있는 파일 목록을 유지 관리하고 ClassNotFound 예외를 throw합니까? –

관련 문제