<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    linugb118--java space

    Java

    【轉】javaAgent 參數

    -javaagent 這個JVM參數是JDK 5引進的.

    java -help的幫助里面寫道:

    -javaagent:<jarpath>[=<options>]
    load Java programming language agent, see java.lang.instrument

    JDK 工具文檔里面,并沒有很詳細的說明。

    1. 代理 (agent) 是在你的main方法前的一個攔截器 (interceptor),也就是在main方法執行之前,執行agent的代碼。

    agent的代碼與你的main方法在同一個JVM中運行,并被同一個system classloader裝載,被同一的安全策略 (security policy) 和上下文 (context) 所管理。

    叫代理(agent)這個名字有點誤導的成分,它與我們一般理解的代理不大一樣。java agent使用起來比較簡單。

    怎樣寫一個java agent? 只需要實現premain這個方法

    public static void premain(String agentArgs, Instrumentation inst)

    JDK 6 中如果找不到上面的這種premain的定義,還會嘗試調用下面的這種premain定義:

    public static void premain(String agentArgs)

    2. Agent 類必須打成jar包,然后里面的 META-INF/MAINIFEST.MF 必須包含 Premain-Class這個屬性。

    下面是一個MANIFEST.MF的例子:

    Manifest-Version: 1.0
    Premain-Class:MyAgent1
    Created-By:1.6.0_06

    然后把MANIFEST.MF 加入到你的jar包中。

    3. 所有的這些Agent的jar包,都會自動加入到程序的classpath中。所以不需要手動把他們添加到classpath。
    除非你想指定classpath的順序。

    4. 一個java程序中-javaagent這個參數的個數是沒有限制的,所以可以添加任意多個java agent。

    所有的java agent會按照你定義的順序執行。
    例如:

     java -javaagent:MyAgent1.jar -javaagent:MyAgent2.jar -jar MyProgram.jar

    假設MyProgram.jar里面的main函數在MyProgram中。

    MyAgent1.jar, MyAgent2.jar,  這2個jar包中實現了premain的類分別是MyAgent1, MyAgent2
    程序執行的順序將會是

    MyAgent1.premain -> MyAgent2.premain -> MyProgram.main

    5. 另外,放在main函數之后的premain是不會被執行的

    例如

    java -javaagent:MyAgent1.jar  -jar MyProgram.jar -javaagent:MyAgent2.jar

    MyAgent2 和MyAgent3 都放在了MyProgram.jar后面,所以MyAgent2的premain都不會被執行,

    所以執行的結果將是

    MyAgent1.premain -> MyProgram.main

    6. 每一個java agent 都可以接收一個字符串類型的參數,也就是premain中的agentArgs,這個agentArgs是通過java option中定義的。
    如:

    java -javaagent:MyAgent2.jar=thisIsAgentArgs -jar MyProgram.jar

    MyAgent2中premain接收到的agentArgs的值將是”thisIsAgentArgs” (不包括雙引號)

    7. 參數中的Instrumentation:

    通過參數中的Instrumentation inst,添加自己定義的ClassFileTransformer,來改變class文件。

    8. 通過java agent就可以不用修改原有的java程序代碼,通過agent的形式來修改或者增強程序了,或者做熱啟動等等。

    9. JDK 6 中還增加了agentmain,agentmain可以在JVM運行過程中做一些事情,這個遲點再研究一下。

    上面我寫的例子可以在我的skydrive上面下載到:點擊下載例子

    參考:

    http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/lang/instrument/package-summary.html

    http://download.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html

    http://javahowto.blogspot.com/2006/07/javaagent-option.html

    posted on 2011-03-02 14:09 linugb118 閱讀(1285) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲色精品三区二区一区| 无码不卡亚洲成?人片| 亚洲色欲久久久综合网| 一级毛片正片免费视频手机看| 在线免费观看a级片| 亚洲乱理伦片在线观看中字| 无码视频免费一区二三区| 亚洲av无码成人精品区一本二本 | 免费中文字幕视频| 成人永久免费高清| 免费的黄网站男人的天堂| 亚洲高清视频一视频二视频三| sihu国产精品永久免费| 亚洲日韩中文无码久久| 亚洲中文字幕久久精品无码喷水 | 国产成人精品123区免费视频| 亚洲精品无码永久在线观看男男| 夭天干天天做天天免费看| 亚洲国产成人无码AV在线影院| 可以免费观看一级毛片黄a| 一区二区三区免费视频网站| 国产亚洲真人做受在线观看| 一级毛片免费观看不卡的| 我的小后妈韩剧在线看免费高清版| 亚洲精品网站在线观看你懂的| 美女被免费喷白浆视频| 亚洲AV无码专区国产乱码不卡| 亚洲精品综合久久| 免费在线看黄网站| 亚洲区视频在线观看| 国产又大又黑又粗免费视频| 国产特黄一级一片免费| 亚洲日本在线播放| 免费a级黄色毛片| 亚洲欧洲免费视频| 亚洲日本成本人观看| 亚洲综合另类小说色区| 国产精品视频永久免费播放| 亚洲美女在线观看播放| 国产片免费在线观看| 日本免费一区二区三区 |