[讨论] sa-jdi.jar 和tools.jar 使用的一些问题
zhxing
2012-08-23
RednaxelaFX 写道 @zhxing
SA最有趣的一点就是它暴露出来的API完全是Java的,有极高的灵活性和可扩展性,所以用它来写工具非常方便。有时候我要对VM内的数据做分析的时候都会借助SA先用Java来写,如果实在有必要做在VM里再把它用C++重新写一次。 而attach API有两类用途,一类是加载Java agent,这个是可扩展的(自己写Java agent);另一类是工具通过私有API发送命令给JVM,执行特定的功能(如jstack、jmap),这种要扩展就必须改JVM自身,对上层程序员来说这扩展性几乎为0。除非打算自己修改与编译JVM,不然要捞JVM层面的数据还是用SA方便。 SA虽然方便,但是要了解只能靠源码了解其大概能实现什么功能,这个比较痛苦。。顺便问下R大,SA是否是JVMTI其中一部分的Java实现 ,还是??如果两者不一样的话,能否对比下。。:wink: |
|
RednaxelaFX
2012-08-23
不,SA跟JVMTI的目的和用途都不一样。两者没有直接关系。
简单来说SA本来就是给JVM开发人员对VM自身做调试用的,并不是设计来给外面或者说Java应用层的开发人员用的。它的Java部分的源码跟HotSpot VM的C++源码有很强的联系,对VM开发人员来说这很直观所以也就不需要什么文档了——会对细节关心的人相应的也应该对VM自身很熟悉才对。 JVMTI是JVMDI、JVMPI等早期JDK提供的调试、剖析API的继承者。它本来就是设计来给外面的人使用的,而且是标准API,需要考虑到跨JVM的兼容性。 它现在主要用来支撑Java层的调试器(例如各主流Java IDE自带的那些)、profiler之类的工具。它的设计就是前面提到的in-process方式的。 要说相似性,Java agent跟JVMTI倒有一点点重叠的地方。JVMTI agent跟Java agent最大的区别是实现语言,前者用C/C++,后者用Java。它们重叠的地方主要是在类加载事件的监控、字节码改写之类的使用场景上。 |
相关讨论
相关资源推荐
- 使用sa-jdi.jar dump 内存中的class
- sa-jdi.jar
- jdk添加源码(rt.jar,tools.jar,sa-jdi.jar)
- tools.jar找不到怎么办
- 执行外部jar包找不到tools.jar问题
- 使用Serviceability Agent(SA)查看JVM中的class文件
- arthas启动报错,找不到tools.jar,C:\Program Files (x86)\Common Files\Oracle\Java\javapath问题
- tools.jar找不到问题
- centos java怎么编译环境变量_Linux CentOS7.0下JAVA安装和配置环境变量
- 解决 hsdb jinfo jmap sa-jdi等mac不可用问题