NoClassDefFoundError!

NoClassDefFoundError는 자바 실행 시에 ClassNotFoundException과 함께 심심찮게 만나게 되는 에러이다.
이 두 가지 에러는 조금 혼란스럽다.

클래스 경로에 클래스가 없을 경우, Class.forName("SomeClass")으로 찾을 경우 ClassNotFoundException이 발생하지만, new SomeClass()로 사용한 경우에는 NoClassDefFoundError가 나게 된다. 이 경우는 컴파일 시에는 존재했던 클래스 바이트 정의를 런타임 시에 찾지 못한 경우로 대표적인 NoClassDefFoundErorr의 발생 예이다. NoClassDefFoundError가 LinkageError의 자식 클래스인 것도 이를 뒷받침해준다.

이 외에도 NoClassDefFoundError가 발생하는 경우가 있는데, 실제 Java VM에서 어떤 경우에 NoClassDefFoundError를 발생시키는지 유형을 정리해두면 문제가 발생했을 때 해결 혹은 판단에 도움이 될 것이다.

  1. VirtualMachine.redefineClasses : if the bytes don't correspond to the reference type (the class names don't match).
  2. ClassLoader.defineClass : 바이트 코드가 정의한 클래스 이름과 정의하려는 이름이 다를 경우
  3. RMIClassLoader static initializer : RMIClassLoader 제공자 클래스를 찾지 못했을 때
  4. rmi MarshalInputStream static initializer : rmi server를 위한 시스템 클래스를 찾지 못했을 때

댓글

이 블로그의 인기 게시물

Java G1 GC의 특성에 따른 Full GC 회피 튜닝 방법

Heap Dump 분석을 통한 Perm Area Memory Leak 원인 진단

맥북프로 13인치 2010년 버전의 하드웨어 업그레이드 산전수전 경험기