jvmti相关内容
感谢 JVMTI 代理,我正在记录我的 Java 应用程序中的所有方法条目.目前,我能够获取每个方法的名称,但我希望能够获取该方法接收到的参数的值. 这个问题已经在较早的主题中讨论过(请参阅 如何在 MethodEntry 回调中获取参数值);它完全符合我的要求,所以我知道我必须使用 GetLocalObject 函数,但我不知道如何使用(主题中给出的示例已损坏). 谁能帮我找出如何做
..
我试图动态修改类,例如在一行之前调用 sleep().我在运行时使用 Attach 方法将代理附加到 jvm.然后我从 jvm 得到目标类,并修改它(添加一行来调用 sleep()).而且我遇到了 redine 类错误.我正在使用JDK1.6.我正在使用 ASM 核心 API 来修改类.错误: Caused by: java.lang.UnsupportedOperationException:
..
有没有一种方法可以在不编织或检测rt.jar的情况下(直接或使用反射)获得对String类的构造函数的所有调用? 是否可以仅针对特定程序包中的呼叫过滤这些通知? 还可以使这些通知异步(例如事件),以免降低实际的JVM调用速度 我的用例是拦截所有正在创建的字符串,在内容上进行模式匹配,并根据某些规则(全部在后端)引发更改,作为某些平台组件的一部分. 由于我不想使用rt.jar
..
有人可以向我解释,当jvm分配一些Java对象而不分配其他Java对象时,为什么我可以得到回调吗?这是我在做什么: static jvmtiCapabilities capa; static jvmtiEnv* jvmti = NULL; static const char* fileName
..
我希望能够获得与Java堆转储中使用的相同的ID(通过jmap或JMX等创建).这是为了能够识别仍在运行的应用程序中的活动对象,而不是同一应用程序的较旧的内存快照(堆转储). 我已经进行了一些测试,这显然不是hashCode,也不是JDI唯一ID(您可以在调试器中看到). 通过检查sun.jvm.hotspot.utilities中的代码,我认为它是内存中的对象地址.但是我对sun.m
..
目标 我正在使用JVMTI代理进行动态字节码检测.我必须检测那些“热"的方法,即调用JIT编译器的方法.为此,我听了CompiledLoadEvent并在其回调函数中调用RetransformClasses.反过来,这会在包含"hot"函数的类上调用ClassFileLoadHook,然后开始实际检测. 问题处所 目前,我正在检测类以产生一些线程.我也听线程启动并在我的代理中打印
..
我是调试器,工具和JVMTI领域的新手. 因此,我对它们的问题很少. JDI(java调试器接口),JWDP,javaagent和本机代理(JVMTI)之间有什么区别. 以及Java工具API在图片中的位置. 我正在使用JDI拦截目标Java应用程序中的异常. 但是我发现,如果我们谈论JDI对目标应用程序性能的影响,JDI还不够好. 我读到,大多数优秀的应用程序都是通过将JVMTI与字
..
JVM工具接口(JVMTI)规范表示可以在实时阶段在VM中启动JVMTI代理,但是他们没有提到如何完成.有人以前尝试过此方法吗,或有任何提示如何做到这一点? 解决方案 您可以使用方法 * @param agent * Path to the JAR file containing the agent. * * @param optio
..
我正在使用JNI分析某些程序.我只是想知道,在获得jclass引用之后,如何找到基础类的大小? 例如: class cls = env-> FindClass("Lee/Boehm/Test"); 从这里我如何评估热点堆中Lee.Boehm.Test类的大小? 谢谢 勃姆 解决方案 去这里 agent.c #include #includ
..
我正在出于各种目的在运行时检测类文件.为此,我正在使用JVMTI代理.我对一种方法进行检测的策略是调用RetransformClasses函数来调用ClassFileLoadHook.此策略适用于在插装后进行任何进一步调用的所有方法,因为实际的插装发生在随后的函数调用中,但不适用于任何在程序中没有诸如main函数之类的进一步调用的方法. 我想在执行过程中动态地检测一个方法.我需要一些过程,例
..
由于使用JVMTI代理,我正在记录Java应用程序中的所有方法条目.现在,我能够获取每个方法的名称,但是我希望能够获取该方法接收到的参数的值. 这个问题已经在较早的主题中进行了讨论(请参阅任何人都可以帮助我找出执行此操作的方法吗?谢谢. 解决方案 我认为您想在不知道其内容的情况下访问任意方法参数,如果不能,则可以澄清问题吗? 有关局部变量,请参见 JVMTI文档. 首先,
..
我正在使用JVMTI为Java应用程序编写一种检测工具。我已经看到JVMTI根据 http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#Exception 。 此文档针对事件和ExceptionCatch都声明了 异常字段标识抛出的异常对象。 尽管没有指出如何在运行期间进行比较(即比较Exception中提供的异
..
当我使用Java程序运行jvmti代理时,jvm似乎遇到了死锁。 在我的jvmti代理中,我在Agent_OnLoad()中创建一个原始监视器,并在每个回调函数的开头输入该锁,并在每个回调函数的结尾退出该锁。 我不知道这种僵局的原因。 谢谢。 解决方案 是的,JVMTI Agent中可能存在死锁。 JVMTI参考指出: 同一线程进入监视器的次数可能超过一次。线程必须 退出
..
使用 SuspendThread 来自JVMTI代理,并使用普通Java 解决方案 在HotSpot JVM中,两个API的作用相同. 我已将链接添加到OpenJDK源代码的相关部分.这两个函数几乎互相复制粘贴,最终都调用相同的低级例程 java.lang.Thread.suspend0()的本地代码: JVM_ENTRY(void, JVM_SuspendThread(JNIEnv
..
我创建了一个简单的Java应用程序,其中包含一个JFrame和几个JButton.当我尝试使用JVMTI检查Java应用程序时,我发现虽然我没有创建任何显式线程,但是却产生了许多显式线程. 我可以找到以下线程: 销毁JavaVM AWT-EventQueue-0 关闭关机 AWT-XAWT-守护程序线程 Java2D Disposer-守护程序线程 线程-0-守护程序线程[由
..
我想找到或开发一个可以作为守护程序运行的应用程序,当主机上运行的Java应用程序出现任何异常或错误时,通过电子邮件或短信通知管理员.我知道 JVMTI 可以实现我的部分目标,但这会影响受监视应用程序的性能(我不知道它的数量多少,如果很小的话,可以接受),此外,开发JVMTI代理似乎是一件麻烦的事,我不确定如果多个应用程序使用同一代理同时运行,将会发生什么情况.有没有更好的解决方案?预先感谢.
..
在使用异步事件探查器和gperftools进行性能分析时,我注意到jvmti->GetTag在我的代理的结果中显示了很多内容.当我检查它的实现方式时,在jvmitTagMap.cpp的源代码中发现了以下内容: jlong JvmtiTagMap::get_tag(jobject object) { MutexLocker ml(lock()); // resolve the obj
..
首先,我很抱歉,这已经在这里得到了一定的回答,但是我认为我的情况有所不同. 如何与附加的jvmti代理进行通信在运行的JVM上 我的主要问题是... 我想知道是否仍然使用JNI或其他库在JVMTI Native Agent和完全独立的JVM之间进行通信. 这是一个小插图 那么这里发生了什么. 左侧的JVM装有本机代理.仅出于讨论目的,让我们假设我无权访问此Java应用程序的
..
我试图动态修改类,例如在一行之前调用sleep().我在运行时使用Attach方法将代理附加到了jvm.然后我从jvm获取了目标类,并对其进行了修改(添加一行以调用sleep()).而且我得到了redine类错误.我正在使用JDK1.6.我正在使用ASM核心API来修改类. 错误: Caused by: java.lang.UnsupportedOperationException: cla
..
我想确定当前正在运行的JVM.最好的情况是使用 JVMTI文档,但我什么也找不到. 我的意思是这样的:VirtualMachine.list()提供: [sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame... 但是它将显示所有JVM,而不是当前正在运行的JVM.
..