问题标签 [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.
java - 身份哈希码到 Java 对象
我的一个朋友和我有以下赌注:
可以通过使用收到的inObject
来从内存中再次获取。具有尚未被垃圾收集器清理的限制。Identity Hashcode
Object
System.identityHashCode()
Java
我一直在寻找一个很长一段时间的答案,但无法找到一个明确的答案。
我认为使用 可能可以做到这一点JVMTI
,但我还没有使用它。
你们中有人对此有答案吗?如果我可以在你的网站上这样做,我会给你买一杯咖啡;)
在此先感谢,菲利克斯
ps:我是说这个行为可以实现,我的朋友说不可能
jvmti - 如何使用 JVMTI 获取对象
我是新手JVMTI
。我正在尝试使用GetObjectSize
方法获取对象大小。
但我被困住了。
我可以使用从堆空间中获取对象JVMTI
吗?GetTag
为了做到这一点,某处是否涉及功能?
我知道我们可以很容易地跟踪对象初始化。但是,我想要特定间隔内的对象。
任何帮助深表感谢。
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?
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]));
?
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
java - 从 jfieldID 获取 jclass
我想使用 JNI 遍历给定类的对象的所有字段值。我找到了 JVMTI 方法GetClassFields
来获取jfieldID
对象字段的 s。在 JNI API 中,我找到了方法Get<type>Field
。但是,要使用这些方法,我首先必须知道我处理的是基元、某种类型的数组还是对象之一。我找到了一个 JNI 方法ToReflectedField
,所以我可以调用反射 API 的 Java 方法。但是,这似乎过于复杂且容易出错。
有没有办法使用 JNI 或 JVMTI 的本机函数来实现这一点?
java - javac 可以提供类的“源调试扩展信息”属性吗?
Java 类文件格式支持称为“源调试扩展”的属性(请参阅Java 语言规范 §4.7.11 “SourceDebugExtension
属性”)。
在支持 JVMTI 这一方面的 JVM 中,您可以使用jvmtiError GetSourceDebugExtension(jvmtiEnv *, jclass, char **)
.
我的问题是是否有办法使用普通javac
和 Java 语言在文件中嵌入“源调试扩展”信息.class
。核心 Java 语言中似乎没有注释可以做到这一点(在javadocjava.lang.Annotation
的“所有已知的实现类”列表中没有明显的候选者)。
java - JVMTI 与附加的 vm 通信
我有一个使用 Java Attach API 附加的本机 JVMTI 代理。代理基本上只是运行Agent_OnAttach
然后存在。我想将信息从代理传递到附加代理的虚拟机。即使只是写入附加代理的 VM 的标准输出也可以。我知道我可以使用诸如套接字或命名管道之类的带外方式,但我正在寻找内置的东西。
java - 如何以“dtrace 样式”跟踪 java 应用程序?
我的任务是使用动态探针(如 dtrace 或 systemtap)跟踪一些 java 应用程序。当然,它应该在没有应用程序重新启动或重新编译的情况下完成。它应该允许在方法调用和内部 JVM 事件上动态设置拦截器。在 solaris 中可以通过 dtrace 完成,但在其他系统中则不行。我怎样才能解决这个任务?