JTI + JNI,為Java程式提供擷取JVM內部資訊的通道

來源:互聯網
上載者:User

標籤:jti   jvm   java   

首先,JTI是啥?

HotSpot JVM是使用C++寫的,在作業系統層面來看,java.exe進程與其他進程並無特別之處。任何一個進程都可以載入第三方的DLL,JTI就是java.exe開放出來的向Java.exe進程注入dll的介面。也就是說,開發人員根據JTI定義好的規範,用C++寫一個dll,這個dll就可以被java.exe進程載入了【啟動jvm的時候要加上-agentlib參數】。

JTI的詳細資料參見以下網址:http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html。

JNI不用多說了。

這裡有意思的是,如果前面寫的JTI dll通過JNI,為java程式提供了直接的調用介面,那就打通了從Java語言到JTI功能的整個調用通道,如下:

首先,Java通過JNI,調用JTI dll中的方法。

然後,我們自己寫的JTI dll,通過JTI介面訪問JVM的內部結構,並擷取JVM內部資訊,並返回。

最後,Java程式獲得JVM內部資訊。

那麼JTI可以提供什麼內部資訊呢?簡單的說,Java偵錯工具能擷取的任何資訊,JTI都能獲得,這是因為Java調試器都是基於JTI寫的。

舉兩個例子,以下是JTI開放出來的兩個調用函數:

GetObjectSize:擷取指定對象佔據記憶體的大小。

FollowReferences:擷取從指定對象能夠訪問的所有對象。

也就是說,通過以上調用過程,應用程式層的Java代碼就可以擷取以上功能了,這在普通的JDK上是沒有的。

最後,實現了這一點不知道有沒有用處,但一定很有意思。。。

JTI + JNI,為Java程式提供擷取JVM內部資訊的通道

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.