2011-12-14 3 views
1

Java 클래스 로더가 "중복 클래스 정의"의 LinkageError를 던지지 않고 클래스의 새 버전을로드하는 등 한 번 이상 클래스를로드 할 수 있습니까?자바 클래스 로더가 두 번 이상 클래스를로드 할 수 있습니까?

즉, 클래스를 동적으로 다시로드해야하는 경우 동일한 클래스 로더로 수행 할 수 있습니까? 아니면 클래스 로더를 먼저 파괴해야하며 새 클래스 버전을로드하는 새 객체를 만들어야합니다. ?

+0

[OSGI] (http://en.wikipedia.org/wiki/OSGi) – stivlo

+1

이 질문에 대한 대답이 도움이 될 수 있습니다. http://stackoverflow.com/questions/148681/unloading-classes -in-java – laher

답변

3

클래스 로더는 실제로 클래스를 한 번만로드 할 수 있습니다! 즉, 한 번만 정의 할 수 있습니다. 여러 번로드 할 수 있지만 처음 정의 할 때만 가능합니다. 나머지 시간에는 이미 처음 정의한 기존 인스턴스가로드됩니다.

클래스를 두 번 정의하려고하면 "duplicate class definition"이 LinkageError이됩니다. 여러 번 클래스를로드하고 다시로드해야하는 경우 다음과 같이 다른 클래스 로더가 수행해야합니다.

클래스를로드 할 클래스 로더를 만듭니다. 클래스를 다시로드하려면 클래스 로더를 삭제 한 다음 클래스의 새 버전을로드 할 새 인스턴스를 만들어야합니다.

물론 이것은 추가로드를 유발하지만 필요하면 괜찮습니다.

또한 메모리 누수가 발생할 수 있으므로 클래스 로더의 이전 인스턴스를 삭제할 때 클래스에 대한 참조를 남기지 않도록주의하십시오.

+0

같은 주제 : http://zeroturnaround.com/blog/reloading-objects-classes-classloaders/ (위 내용은 거의 설명되어 있습니다). –

0

클래스를 다시로드하는 이유는 클래스 변경입니다. 이 공간에서 핫 스폿은 클래스의 자동 로딩을 자동으로 처리합니다. 그래서 당신은 이것에 신경 쓰지 않아도됩니다. 이게 도움이 되길 바란다.

+1

동일한 클래스 로더로 다시로드 할 수 있는지 질문합니다. –

관련 문제