问题标签 [jvmti]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
658 浏览

java - 身份哈希码到 Java 对象

我的一个朋友和我有以下赌注:

可以通过使用收到的inObject来从内存中再次获取。具有尚未被垃圾收集器清理的限制。Identity HashcodeObjectSystem.identityHashCode()Java

我一直在寻找一个很长一段时间的答案,但无法找到一个明确的答案。

我认为使用 可能可以做到这一点JVMTI,但我还没有使用它。

你们中有人对此有答案吗?如果我可以在你的网站上这样做,我会给你买一杯咖啡;)

在此先感谢,菲利克斯

ps:我是说这个行为可以实现,我的朋友说不可能

0 投票
1 回答
231 浏览

jvmti - 如何使用 JVMTI 获取对象

我是新手JVMTI。我正在尝试使用GetObjectSize方法获取对象大小。

但我被困住了。

我可以使用从堆空间中获取对象JVMTI吗?GetTag为了做到这一点,某处是否涉及功能?

我知道我们可以很容易地跟踪对象初始化。但是,我想要特定间隔内的对象。

任何帮助深表感谢。

0 投票
1 回答
173 浏览

java - testing hbase with jvmti agent

I want to test hbase using its test cases. I downloaded the project from this link and followed the instruction to test the project, which is simply running the command line

There is no problem up to here. What I want to do is to run test cases with jvmti agent. The agent works perfectly fine, I tried it on several java files. Normally, I call my agent to test a java file using

In this case, the project use maven and I am not good at pom files. I tried to use

However it did not wok. How can I test hbase with my agent?

0 投票
1 回答
53 浏览

heap-dump - heapViewer.c(JVMTI Demo)中“(jlong​​)(ptrdiff_t)(void *)”的目的是什么?

下面是演示代码():

SetTag 的原型是 jvmtiError SetTag(jvmtiEnv* env, jobject object, jlong tag).

我可以像这样使用它: err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(&details[i]));

0 投票
1 回答
751 浏览

java - 启用 JVMTI *capability* 以查询局部变量的开销

我正在研究一种在 JVM 上运行的简单动态语言。所需的功能之一是:只有在抛出异常时,我才需要能够在抛出异常时查询调用堆栈中所有帧的局部变量。此功能在标准 Java 或反射中不可用。因此,我正在研究以下想法:

  • 用 C 写一个简单的 JVMTI 共享对象
  • 当在 Java 领域引发异常时,触发 JVMTI 函数
  • JVMTI 库中的代码挂起引发异常的 Java 线程,检查堆栈以提取局部变量,将它们存储在可访问的位置,然后恢复 Java 线程

除了在这一种情况下,根本不会使用 JVMTI。代码可能会运行数天而不会引发异常,我希望它的运行速度与未启用 JVMTI 的代码一样快。

所以我的问题是:在主流 JVM 实现(Oracle)中,启用我需要的 JVMTI 功能的开销是多少?例如,这样做会禁用 JIT'ing 吗?

我对所需的 JVMTI “功能”的最佳猜测是:

  • can_signal_thread
  • can_get_source_file_name
  • can_get_source_debug_extension
  • can_access_local_variables
0 投票
1 回答
720 浏览

java - 从 jfieldID 获取 jclass

我想使用 JNI 遍历给定类的对象的所有字段值。我找到了 JVMTI 方法GetClassFields来获取jfieldID对象字段的 s。在 JNI API 中,我找到了方法Get<type>Field。但是,要使用这些方法,我首先必须知道我处理的是基元、某种类型的数组还是对象之一。我找到了一个 JNI 方法ToReflectedField,所以我可以调用反射 API 的 Java 方法。但是,这似乎过于复杂且容易出错。

有没有办法使用 JNI 或 JVMTI 的本机函数来实现这一点?

0 投票
1 回答
474 浏览

java - javac 可以提供类的“源调试扩展信息”属性吗?

Java 类文件格式支持称为“源调试扩展”的属性(请参阅Java 语言规范 §4.7.11 “SourceDebugExtension属性”)。

在支持 JVMTI 这一方面的 JVM 中,您可以使用jvmtiError GetSourceDebugExtension(jvmtiEnv *, jclass, char **).

我的问题是是否有办法使用普通javac和 Java 语言在文件中嵌入“源调试扩展”信息.class。核心 Java 语言中似乎没有注释可以做到这一点(在javadocjava.lang.Annotation的“所有已知的实现类”列表中没有明显的候选者)。

0 投票
4 回答
1230 浏览

java - 有没有办法使用 JVMTI 生成定期的 Java 线程转储?

在 java 中有多种生成线程转储的方法。

我想使用JVMTI(C API)来生成它,以评估它对正在运行的 JVM 的性能影响。(我知道 jstack 和 JMX ;这个问题通常不是关于获取线程转储,而是关于使用 JVMTI API)。

我的代码基于这篇博文。在那里,java 代理附加到 SIGQUIT 信号。我想避免这种情况,因为这与 JVM 用于将线程转储写入标准输出的信号相同。我想避免这种重复。

换句话说,我想附加到不同的信号,或者想办法让代理定期生成线程转储。

0 投票
1 回答
456 浏览

java - JVMTI 与附加的 vm 通信

我有一个使用 Java Attach API 附加的本机 JVMTI 代理。代理基本上只是运行Agent_OnAttach然后存在。我想将信息从代理传递到附加代理的虚拟机。即使只是写入附加代理的 VM 的标准输出也可以。我知道我可以使用诸如套接字或命名管道之类的带外方式,但我正在寻找内置的东西。

0 投票
1 回答
696 浏览

java - 如何以“dtrace 样式”跟踪 java 应用程序?

我的任务是使用动态探针(如 dtrace 或 systemtap)跟踪一些 java 应用程序。当然,它应该在没有应用程序重新启动或重新编译的情况下完成。它应该允许在方法调用和内部 JVM 事件上动态设置拦截器。在 solaris 中可以通过 dtrace 完成,但在其他系统中则不行。我怎样才能解决这个任务?