国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Instrumentation

2019-11-11 02:54:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Instrumentation的功能

java Instrumentation指的是用代理程序來(lái)監(jiān)測(cè)和協(xié)助運(yùn)行在JVM上的應(yīng)用程序,并且這種代理程序是獨(dú)立于應(yīng)用程序之外的,這是Instrumentation功能的最主要特性。 Instrumentation能夠監(jiān)測(cè)和協(xié)助的功能主要包括:

獲取JVM運(yùn)行時(shí)狀態(tài)在運(yùn)行時(shí)動(dòng)態(tài)修改類(lèi)定義

在 Java SE 5+中,可以在一個(gè)普通 Java 類(lèi)(具有main 函數(shù),對(duì)于Tomcat內(nèi)的應(yīng)用,Tomcat自身帶有main函數(shù))運(yùn)行時(shí),通過(guò) -javaagent 參數(shù)指定一個(gè)特定的 jar 文件來(lái)啟動(dòng) Instrumentation 的代理程序。啟動(dòng)代理程序有以下兩種方式。

PRemain方式

main方法啟動(dòng)前啟動(dòng)一個(gè)代理程序.語(yǔ)法:java -javaagent:agent_jar_path[=options] java_app_name 為了實(shí)現(xiàn)代理功能,需要:

代理類(lèi)必須提供一個(gè)public static void premain(String args, Instrumentation inst)或 public static void premain(String args) 方法 舉個(gè)栗子:public class Main { public static void premain(String args, Instrumentation inst) { Manager.instance().initialization(); inst.addTransformer(new ProfTransformer());//這里的ProfTransformer主要用于修改字節(jié)碼 Manager.instance().startupThread(); }}jar包的manifest文件中包含Premain-Class屬性,并且屬性的值為代理類(lèi)全路徑名 舉個(gè)栗子:Manifest-Version: 1.0Archiver-Version: Plexus ArchiverCreated-By: Apache MavenBuilt-By: manlgeBuild-Jdk: 1.7.0_25Premain-Class: com.taobao.profile.Main

agentmain方式

agentmain方式能夠在JVM啟動(dòng)后動(dòng)態(tài)的去修改一些類(lèi)的行為,這一點(diǎn)可以極大地提高調(diào)試效率。 實(shí)現(xiàn)步驟:

代理類(lèi)需要提供public static void agentmain(String args, Instrumentation inst)或public static void agentmain(String args)方法。如果這兩個(gè)方法同時(shí)存在,以前者優(yōu)先。在manifest中指定Agent-Class屬性,值為代理類(lèi)全路徑Attach API,在運(yùn)行時(shí)動(dòng)態(tài)加載一個(gè)代理jar,詳細(xì)方式可以參考這里
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 衢州市| 嘉祥县| 岢岚县| 阳曲县| 泰宁县| 界首市| 和硕县| 玛曲县| 南汇区| 易门县| 廊坊市| 乌恰县| 嘉义市| 阳泉市| 玉田县| 昌黎县| 巴林左旗| 九江县| 舟山市| 高唐县| 清流县| 阳曲县| 中西区| 常宁市| 望奎县| 乐陵市| 中西区| 珲春市| 滦平县| 虞城县| 甘谷县| 上饶市| 大冶市| 广州市| 平阳县| 焦作市| 环江| 周宁县| 民乐县| 牙克石市| 昂仁县|