當執行reset、shutdown命令之後,需要對增強後的目標類進行恢復,
本篇主要對重置命令的實現進行分析。
注意:reset命令對redefine的類無效。redefine後的原來的類不能恢復。如果想重置,需要redefine原始的位元組碼。 原因是redefine和retransform是不同的機制,詳情參見我之前寫的文章。
resetcommand#process
enhancer#reset@override
public
void
process
(commandprocess process)
catch
(unmodifiableclas***ception e)
finally
}
重置增強類
注意:當前方法中的transform()返回null,reset只是恢復原位元組碼內容,無需定義任何增強邏輯。
enhancer#enhancepublic
static
synchronized enhanceraffect reset
(final instrumentation inst,
final matcher classnamematcher)
throws unmodifiableclas***ception
}//定義位元組碼轉換器
final classfiletransformer resetclassfiletransformer =
newclassfiletransformer()
};tryfinally
}return affect;
}
批量重置。
public
static
void
enhance
(instrumentation inst, classfiletransformer transformer, set?>> classes)
throws unmodifiableclas***ception
}finally
}
Lua位元組碼分析
lua 首先會被lua編譯器 通常所指的luac 編譯為二進位制檔案,編譯是以乙個lua檔案為單位,比如乙個lua檔案內有語法錯誤,即使你不執行相關 這個檔案也是編譯不過去的 編譯完成後,然後二進位制檔案被lua虛擬機器載入執行。但實際上我們並不能看到編譯器的這個過程,這是因為lua直譯器是隱式呼叫...
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
思科VPP原始碼分析(dpo機制原始碼分析)
vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...