2009-10-03 3 views
3

rt.jar에서 클래스를 수정할 때의 제한 사항은 무엇입니까? 나는 이것이 일반적으로 JRE의 버전과 벤더에 따라 다르다는 것을 알고있다. 예를 들어, Sun 1.6 VM의 핫스팟은 java.lang.Object에 필드를 추가하는 경우 Object의 크기에 대한 하드 코딩 가정이 있으므로 마음에 들지 않습니다. 그러나 rt.jar 클래스의 중요한 부분을 수정하면 런타임에 클래스가 내 항아리에 확실히 들어 있다는 가짜 ClassNotFoundErrors가 발생합니다. rt.jar을 수정하고 다양한 -Xbootclasspath 매개 변수로 대체하려고 시도했습니다.rt.jar 수정 제한 사항

나는 이런 종류의 문서를 어디에서 찾을 것인가를 모른다. 예를 들어, OpenJDK 문서에서 아무것도 찾을 수 없다.

+0

왜 이렇게했는지 궁금합니다. – tgdavies

+0

Object에 필드를 추가하면 많은 메모리 공간과 가비지 수집 시간이 소요됩니다. – Nettogrof

+0

기본 클래스를 편집해야하는 이유가 궁금합니다. JDK 클래스에 이식성이없는 변경 사항을 작성하는 것 외에도 문제를 해결할 수있는 또 다른 방법이있을 수 있습니다. – dhable

답변

1

원하는 것을 얻기 위해 바이트 코드 계측 라이브러리를 사용 해본 적이 있습니까? ASM + java.lang.instrument을 사용할 수 있습니다. JDK의 5.0보다 크거나 같음

+0

그게 바로 제가하고있는 일입니다. 문제는이 기법을 사용하여 특정 핵심 클래스에 도달 할 수 없다는 것입니다. 왜냐하면 해당 클래스가 이미 계측 코드를 실행할 때로드되기 때문입니다. 내 추락은 이러한 클래스 (또는 전체 rt.jar)를 선험적으로 수정하는 것이고 이것은 내가 곤경에 처하게되는 부분이다. –

+0

내 두 센트는 이러한 클래스를 재정의하려고 할 때 unmodifiableClassException을 얻을 수 있습니다. – Gilad