亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使 Byte Buddy 將許多類型加載到同一包裝器類加載器中

如何使 Byte Buddy 將許多類型加載到同一包裝器類加載器中

米琪卡哇伊 2022-09-22 16:10:04
我正在使用Byte Buddy,在這種情況下,我可能需要用它創建幾十萬個類。這些是實現接口的獨立類,而不是代理?,F在,我通過包裝應用程序的一個類加載器將我的實例加載到類加載器中:DynamicType.Unloaded<?>final Class<?> myClass =    unloadedType        .load(someAppClassLoader, ClassLoadingStrategy.Default.WRAPPER)        .getLoaded();這種包裝策略適合我,但我遇到的問題是,每次我執行上面的代碼時,都會創建一個僅包含新類的新密封。我知道我可以“包括”輔助類型...但這些不是輔助類型,而是完全獨立的類。ClassLoader由于我必須創建數千個類加載器,因此我留下了大量我并不真正需要的類加載器,因為我想將bytebuddy創建的類與其余類隔離開來,但不是一個類,也不需要為每個類加載器創建一個新的類加載器。我的分析顯示,大量類加載器(在本例中相當重)帶來了相當大的內存開銷。從我的測試中,我似乎可以對第一個使用包裝策略:final Class<?> myClass =    type        .load(someAppClassLoader, ClassLoadingStrategy.Default.WRAPPER)        .getLoaded();...然后檢索新的類裝入器:final ClassLoader bbClassLoader = myClass.getClassLoader();...然后在后續創建中使用此類裝入器,方法是將策略切換到注入:final Class<?> myOtherClass =    otherUnloadedType        .load(bbClassLoader, ClassLoadingStrategy.Default.INJECTION)        .getLoaded();但這對我來說看起來不是一個干凈的策略,因為它似乎是通過內省注入的,以規避類加載器被密封的事實。所以我想知道是否有更好的機制在Byte Buddy中做到這一點。請注意,為了有一個正確密封的類裝入器,我可以一次將我所有的數千個對象變成一個類裝入器實例(并密封它)。我可以在應用程序引導時批量初始化我的所有類,然后不用進一步動態創建類加載器。DynamicType.UnloadedClass<?>對于像我這樣的場景,正確的策略是什么?
查看完整描述

1 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

使用策略時創建的類裝入器允許在類裝入器生命周期的稍后階段裝入類。出于安全原因,需要通過調用策略來啟用此功能。WRAPPERopened()

然后,您可以將第一個類加載器強制轉換為該加載器,以便在沒有任何不安全的 API 的情況下注入其他類的位置使用。InjectionClassLoaderInjectionClassLoader.Strategy.INSTANCE

您還可以通過調用來組合多個實例,然后在一次清洗中使用加載所有類。DynamicTypeincludeWRAPPER


查看完整回答
反對 回復 2022-09-22
  • 1 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號