2009-10-03 75 views
3

修改rt.jar中的類時有什麼限制。我意識到這通常是特定於JRE的版本和供應商。例如,我發現Sun 1.6 VM中的Hotspot不喜歡將字段添加到java.lang.Object中,因爲它對Object的大小進行了硬編碼假設。但是,如果我修改了rt.jar中的重要部分,我會在運行時得到虛假的ClassNotFoundErrors,這些類肯定在我的jar中。我試過修改rt.jar以及用各種-Xbootclasspath參數取代它。修改rt.jar的限制

我真的不知道在哪裏尋找關於這類事情的文檔,例如,在OpenJDK文檔中我找不到任何東西。

+0

我很好奇你的理由嗎? – tgdavies 2009-10-04 07:10:59

+0

向對象添加一個字段會花費你很多的內存空間和垃圾收集時間。 – Nettogrof 2009-10-04 16:01:56

+0

我也很好奇爲什麼你覺得需要編輯基類。除了在JDK類中構建不可移植的更改外,可能還有另一種解決方法。 – dhable 2009-10-05 17:33:34

回答

1

你有沒有考慮過使用字節代碼工具庫來實現你想要的?你可以使用ASM + java.lang.instrument,對於JDK的大於或等於5.0

+0

這正是我在做的事實。問題是我無法使用這種技術獲得某些核心類,因爲它們在運行我的檢測代碼時已經加載。我的迴歸是先驗地修改這些類(或整個rt.jar),這就是我遇到麻煩的地方。 – 2009-10-06 13:33:15

+0

我的兩分錢是,當你試圖重新定義這些類時,你可能會得到unmodifiableClassException – Gilad 2013-08-14 09:33:57