jvmti相关内容

JVMTI - 如何从回调中获取方法参数的值

感谢 JVMTI 代理,我正在记录我的 Java 应用程序中的所有方法条目.目前,我能够获取每个方法的名称,但我希望能够获取该方法接收到的参数的值. 这个问题已经在较早的主题中讨论过(请参阅 如何在 MethodEntry 回调中获取参数值);它完全符合我的要求,所以我知道我必须使用 GetLocalObject 函数,但我不知道如何使用(主题中给出的示例已损坏). 谁能帮我找出如何做 ..
发布时间:2022-01-25 21:45:20 Java开发

无法重新定义类当我尝试重新转换类时

我试图动态修改类,例如在一行之前调用 sleep().我在运行时使用 Attach 方法将代理附加到 jvm.然后我从 jvm 得到目标类,并修改它(添加一行来调用 sleep()).而且我遇到了 redine 类错误.我正在使用JDK1.6.我正在使用 ASM 核心 API 来修改类.错误: Caused by: java.lang.UnsupportedOperationException: ..
发布时间:2021-11-11 04:33:38 Java开发

Java 8 HotSpot VM中任何String对象构造的通知

有没有一种方法可以在不编织或检测rt.jar的情况下(直接或使用反射)获得对String类的构造函数的所有调用? 是否可以仅针对特定程序包中的呼叫过滤这些通知? 还可以使这些通知异步(例如事件),以免降低实际的JVM调用速度 我的用例是拦截所有正在创建的字符串,在内容上进行模式匹配,并根据某些规则(全部在后端)引发更改,作为某些平台组件的一部分. 由于我不想使用rt.jar ..
发布时间:2020-06-29 18:52:26 Java开发

受jvmti对象分配回调行为困扰

有人可以向我解释,当jvm分配一些Java对象而不分配其他Java对象时,为什么我可以得到回调吗?这是我在做什么: static jvmtiCapabilities capa; static jvmtiEnv* jvmti = NULL; static const char* fileName ..
发布时间:2020-06-29 18:52:20 Java开发

如何获取堆转储中使用的对象ID

我希望能够获得与Java堆转储中使用的相同的ID(通过jmap或JMX等创建).这是为了能够识别仍在运行的应用程序中的活动对象,而不是同一应用程序的较旧的内存快照(堆转储). 我已经进行了一些测试,这显然不是hashCode,也不是JDI唯一ID(您可以在调试器中看到). 通过检查sun.jvm.hotspot.utilities中的代码,我认为它是内存中的对象地址.但是我对sun.m ..
发布时间:2020-06-29 18:52:17 Java开发

动态字节码检测失败,没有任何错误

目标 我正在使用JVMTI代理进行动态字节码检测.我必须检测那些“热"的方法,即调用JIT编译器的方法.为此,我听了CompiledLoadEvent并在其回调函数中调用RetransformClasses.反过来,这会在包含"hot"函数的类上调用ClassFileLoadHook,然后开始实际检测. 问题处所 目前,我正在检测类以产生一些线程.我也听线程启动并在我的代理中打印 ..

JDI,Java字节码工具和Java代理(JWDP,JVMTI)

我是调试器,工具和JVMTI领域的新手. 因此,我对它们的问题很少. JDI(java调试器接口),JWDP,javaagent和本机代理(JVMTI)之间有什么区别. 以及Java工具API在图片中的位置. 我正在使用JDI拦截目标Java应用程序中的异常. 但是我发现,如果我们谈论JDI对目标应用程序性能的影响,JDI还不够好. 我读到,大多数优秀的应用程序都是通过将JVMTI与字 ..
发布时间:2020-06-29 18:52:04 Java开发

在实时阶段在VM中启动JVM工具接口代理

JVM工具接口(JVMTI)规范表示可以在实时阶段在VM中启动JVMTI代理,但是他们没有提到如何完成.有人以前尝试过此方法吗,或有任何提示如何做到这一点? 解决方案 您可以使用方法 * @param agent * Path to the JAR file containing the agent. * * @param optio ..
发布时间:2020-06-29 18:52:01 Java开发

从JNI jclass确定Java类的大小

我正在使用JNI分析某些程序.我只是想知道,在获得jclass引用之后,如何找到基础类的大小? 例如: class cls = env-> FindClass("Lee/Boehm/Test"); 从这里我如何评估热点堆中Lee.Boehm.Test类的大小? 谢谢 勃姆 解决方案 去这里 agent.c #include #includ ..
发布时间:2020-06-29 18:51:59 其他开发

如何用没有进一步调用的JVMTI代理重新转换执行方法?

我正在出于各种目的在运行时检测类文件.为此,我正在使用JVMTI代理.我对一种方法进行检测的策略是调用RetransformClasses函数来调用ClassFileLoadHook.此策略适用于在插装后进行任何进一步调用的所有方法,因为实际的插装发生在随后的函数调用中,但不适用于任何在程序中没有诸如main函数之类的进一步调用的方法. 我想在执行过程中动态地检测一个方法.我需要一些过程,例 ..
发布时间:2020-06-29 18:51:55 Java开发

JVMTI-如何从回调获取方法参数的值

由于使用JVMTI代理,我正在记录Java应用程序中的所有方法条目.现在,我能够获取每个方法的名称,但是我希望能够获取该方法接收到的参数的值. 这个问题已经在较早的主题中进行了讨论(请参阅任何人都可以帮助我找出执行此操作的方法吗?谢谢. 解决方案 我认为您想在不知道其内容的情况下访问任意方法参数,如果不能,则可以澄清问题吗? 有关局部变量,请参见 JVMTI文档. 首先, ..
发布时间:2020-06-29 18:51:52 Java开发

通过JVMTI识别异常

我正在使用JVMTI为Java应用程序编写一种检测工具。我已经看到JVMTI根据 http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#Exception 。 此文档针对事件和ExceptionCatch都声明了 异常字段标识抛出的异常对象。 尽管没有指出如何在运行期间进行比较(即比较Exception中提供的异 ..
发布时间:2020-06-11 00:17:22 Java开发

jvmti代理死锁

当我使用Java程序运行jvmti代理时,jvm似乎遇到了死锁。 在我的jvmti代理中,我在Agent_OnLoad()中创建一个原始监视器,并在每个回调函数的开头输入该锁,并在每个回调函数的结尾退出该锁。 我不知道这种僵局的原因。 谢谢。 解决方案 是的,JVMTI Agent中可能存在死锁。 JVMTI参考指出: 同一线程进入监视器的次数可能超过一次。线程必须 退出 ..
发布时间:2020-06-02 20:27:30 其他开发

Java应用程序开始执行时,这些线程会受到哪些刺激?

我创建了一个简单的Java应用程序,其中包含一个JFrame和几个JButton.当我尝试使用JVMTI检查Java应用程序时,我发现虽然我没有创建任何显式线程,但是却产生了许多显式线程. 我可以找到以下线程: 销毁JavaVM AWT-EventQueue-0 关闭关机 AWT-XAWT-守护程序线程 Java2D Disposer-守护程序线程 线程-0-守护程序线程[由 ..
发布时间:2020-05-13 21:10:16 Java开发

如何监视其他Java应用程序生成的异常或错误?

我想找到或开发一个可以作为守护程序运行的应用程序,当主机上运行的Java应用程序出现任何异常或错误时,通过电子邮件或短信通知管理员.我知道 JVMTI 可以实现我的部分目标,但这会影响受监视应用程序的性能(我不知道它的数量多少,如果很小的话,可以接受),此外,开发JVMTI代理似乎是一件麻烦的事,我不确定如果多个应用程序使用同一代理同时运行,将会发生什么情况.有没有更好的解决方案?预先感谢. ..
发布时间:2020-05-11 22:08:24 Java开发

JVMTI代理与单独的JVM之间的通信

首先,我很抱歉,这已经在这里得到了一定的回答,但是我认为我的情况有所不同. 如何与附加的jvmti代理进行通信在运行的JVM上 我的主要问题是... 我想知道是否仍然使用JNI或其他库在JVMTI Native Agent和完全独立的JVM之间进行通信. 这是一个小插图 那么这里发生了什么. 左侧的JVM装有本机代理.仅出于讨论目的,让我们假设我无权访问此Java应用程序的 ..
发布时间:2020-04-25 07:38:09 Java开发

我尝试重新转换班级时无法重新定义班级

我试图动态修改类,例如在一行之前调用sleep().我在运行时使用Attach方法将代理附加到了jvm.然后我从jvm获取了目标类,并对其进行了修改(添加一行以调用sleep()).而且我得到了redine类错误.我正在使用JDK1.6.我正在使用ASM核心API来修改类. 错误: Caused by: java.lang.UnsupportedOperationException: cla ..
发布时间:2020-04-25 07:29:10 Java开发

使用Java或JVMTI识别当前的JVM

我想确定当前正在运行的JVM.最好的情况是使用 JVMTI文档,但我什么也找不到. 我的意思是这样的:VirtualMachine.list()提供: [sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame... 但是它将显示所有JVM,而不是当前正在运行的JVM. ..
发布时间:2020-04-25 07:27:38 Java开发