2009-10-03 10 views
3

Quelles sont les limitations lors de la modification de classes dans rt.jar. Je réalise que cela est généralement spécifique à la version et au vendeur de JRE. J'ai trouvé que Hotspot dans la machine virtuelle Sun 1.6, par exemple, n'aime pas si vous ajoutez des champs à java.lang.Object car il a des hypothèses codées en dur sur la taille de l'objet. Cependant, si je modifie des parties significatives des classes dans rt.jar, j'obtiens des ClassNotFoundErrors parasites à l'exécution pour les classes qui sont définitivement dans mon pot. J'ai essayé de modifier rt.jar en place et de le remplacer par les divers paramètres -Xbootclasspath.Limites de modification de rt.jar

Je ne sais pas vraiment où chercher de la documentation sur ce genre de chose, je ne trouve rien dans les documents OpenJDK, par exemple.

+0

Je suis curieux de connaître vos raisons pour cela? – tgdavies

+0

ajouter un champ à l'objet vous coûtera beaucoup d'espace mémoire et temps de collecte des ordures. – Nettogrof

+0

Je serais également curieux de savoir pourquoi vous ressentez le besoin de modifier les classes de base. Il y a probablement une autre façon de résoudre le problème en plus de construire des changements non portables dans les classes JDK. – dhable

Répondre

1

Avez-vous envisagé d'utiliser une bibliothèque d'instrumentation à code octet pour obtenir ce que vous voulez? Vous pouvez utiliser ASM + java.lang.instrument, pour JDK est supérieur ou égal à 5,0

+0

C'est exactement ce que je fais, en fait. Le problème est que je ne peux pas accéder à certaines classes de base avec cette technique, car elles sont déjà chargées au moment où j'exécute mon code d'instrumentation. Ma retombée est de modifier ces classes (ou le rt.jar entier) a priori et c'est là que j'ai des problèmes. –

+0

Mes deux cents sont que lorsque vous essayez de redéfinir ces classes, vous pourriez obtenir unmodifiableClassException – Gilad

Questions connexes