1. 程式人生 > >如何知道某個java類從哪個位置載入?

如何知道某個java類從哪個位置載入?

1. 如果可以除錯或加入print語句,那麼可以通過Class.getProtectionDomain().getCodeSource().getLocation() 返回的URL得知。

2. 如果不能除錯,可以重啟JVM,那麼可以新增JVM啟動引數 -verbose:class 或 -XX:+TraceClassLoading,則在啟動時可以打出每個裝載的類的路徑

3. 如果不能重啟,對於sun HotSpot 虛擬機器,可以用 com.sun.tools.attach.VirtualMachine.attach 方法返回一個 VirtualMachine,然後呼叫其loadAgent方法,使其呼叫一個你自己寫的agent jar的agentmain方法,在agentmain方法得到呼叫時,會獲得傳進來的引數

Instrumentation,呼叫Instrumentation.getAllLoadedClasses() 會返回所有已裝載的Class[], 進而用第一種方法獲得其URL