问题标签 [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 JVMTI 不能与 -Xdebug -Xrunjdwp 一起使用
我花了最后 4 个小时尝试在必须远程运行的 Tomcat 实例上设置 Eclipse TPTP 内存分析(即不在 Eclipse 中)。根据 TPTP 和代理控制器文档,这应该是可能的。
我根据网站上的说明将 TPTP 组件 (4.6.0) 与代理控制器一起安装到了我的 Eclipse (Galileo) 工作台中。为了启用代理,我在启动 Tomcat 实例的命令行中添加了以下选项:
并将以下目录添加到 PATH 的前面:
尝试启动 Tomcat 时,我一直收到以下错误消息:
我做了很多谷歌搜索,但没有发现任何相关信息;我尝试重新安装 TPTP 和各种版本的代理控制器。
最后问题是我使用“jpda”选项启动Tomcat,catalina.bat 转换为
删除“jpda”命令参数导致 JVMTI 开始工作。
所以,问题是:在我的任何搜索过程中,我都没有发现任何 JVMTI 代理与调试不兼容。有人可以解释发生了什么以及为什么 JVMTI + JDWP 不是有效的设置吗?
java - 是否有诸如 Java 运行时管理员之类的角色?
有数据库管理员 (DBA) 和 Unix|Windows 系统管理员。可能很快就会出现云管理员。
有成群的“管理员”负责管理和管理在各种堆栈上/中运行的大量大型系统 JVM,但老实说,我遇到的他们中很少有人真正了解 JVM 是什么,监控它,仪器仪表,测量和调整。大型组织是否雇用负责管理其 Oracle 实例的 Windows 管理员?然而,全世界的企业和公共部门都希望系统管理员能够以同样的不透明性来管理 JVM。
Java 运行时管理员是否有有效的操作角色?
java - 使用 JDWP 和 JVMTI 获取正在运行的 Java 应用程序的信息
我们正在开发一个应用程序,用于使用 JDWP 和 JVMTI 获取正在运行的 java 应用程序的信息。Sun Java 附带了 JDWP 的参考实现,因此使用 agentlib -jdwp: 将使用参考实现。我们的目标是研究 JVMTI 并编写 JVMTI 代理以获取具体细节。还创建了一个前端,用户可以使用它来请求有关正在运行的 java 应用程序的特定信息。为此,我们必须为 JDWP 编写实现。尽管我们能够编写 JVMTI 代理并使用它从命令行附加到 Java 应用程序。但我们的目标是将此信息发送到另一个 java 进程(前端)。
所以我们有一个 Java 应用程序——前端从 JVMTI 代理(后端)查询信息。这些代理应该能够附加到我们将要动态检查的正在运行的 java 应用程序。关于如何做到这一点的任何想法?或者以前有人试过吗?
java - 在实时阶段在 VM 中启动 JVM 工具接口代理
JVM 工具接口 (JVMTI)规范说 JVMTI 代理可以在实时阶段在 VM 中启动,但他们没有提到如何完成。有没有人尝试过这个或得到任何关于如何做到这一点的提示?
java - Java:您如何真正使用 JVMTI 的 ForceGargabeCollection 强制 GC?
我不是在寻找通常的“您只能使用System.gc()在 Java 中提示 GC ”的答案,这根本不是这个问题的意义所在。
我的问题不是主观的,而是基于一个现实:在 Java 中可以强制 GC作为一个事实。我们每天使用的很多程序都是这样做的:IntelliJ IDEA、NetBeans、VisualVM。
它们都可以强制GC 发生。
它是如何完成的?
我认为他们都在使用 JVMTI,更具体地说是ForceGarbageCollection(注意“Force”),但我怎样才能自己尝试呢?
http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection
另请注意,这个问题不是关于“为什么”我想这样做:“为什么”可能是“好奇”或“我们正在编写类似于 VisualVM 的程序”等。
问题实际上是“如何使用 JVMTI 的 ForceGarbageCollection 强制 GC”?
JVM 是否需要使用任何特殊参数启动?
是否需要任何 JNI?如果是这样,具体是什么代码?
它仅适用于 Sun VM 吗?
任何完整且可编译的示例都将受到欢迎。
java - 当 Java 应用程序开始执行时,这些线程是什么?
我创建了一个简单的 Java 应用程序,它有一个 JFrame 和几个 JButton。当我尝试使用 JVMTI 检查 Java 应用程序时,我发现虽然我没有创建任何显式线程,但还是产生了很多线程。
我可以找到以下线程:
- 销毁JavaVM
- AWT-EventQueue-0
- AWT-关机
- AWT-XAWT- 守护线程
- Java2D Disposer - 守护线程
- Thread-0- 守护线程 [由 JVMTI 代理创建]
- Signal Dispatcher - 守护线程
- Finalize-守护线程
- 参考处理程序 - 守护线程
它们中的大多数处于 Runnable 状态。有人能告诉我这些线程的功能吗?
java - 从 JNI 方法中创建 JVM
是否可以使用 JNI API 从 JNI 方法中创建 JVM?
我尝试使用 JNI 函数“JNI_CreateJavaVM()”来执行此操作,但它不起作用(该函数始终返回小于零的值)。
这是我正在使用的基本代码(C++):
其中 USER_CLASSPATH 包含我要加载的类的路径。上述代码执行后,res < 0,说明JNI_CreateJavaVM()失败。上面的代码是从 Java 调用的用 C++ 编写的本机方法的一部分。关于如何让它发挥作用的任何想法?
谢谢。
java - JVMTI:FollowReferences:如何跳过软/弱/幻影引用?
我正在编写一个小代码来检测在我们的工具中执行某些操作后留下的对象数量。这使用FollowReferences()
来自 JVMTI API。这会计算所有路径可到达的实例。如何跳过包含弱/软/幻像引用的路径?
(IterateThroughHeap()
目前计算所有对象,所以这个数字并不完全可靠。)
java - 如何检测 Java 代理、JVMTI 等
在您无法控制的机器上运行时,如何保护 Java 环境?什么是阻止某人创建 java 代理或本机 JVMTI 代理并转储字节码或重写类以绕过许可和/或其他安全检查?有什么方法可以检测是否有任何代理从 Java 代码运行?来自 JNI?来自 JVMTI 代理?
java - 如何在 MethodEntry 回调中获取参数值
我有以下java代码
我有一个附加到 java 的 jvmti 代理,我在其中捕获函数调用。我想获取传递给我的方法的参数值(例如“Bonjour”)
在回调本身中,我有一个线程和方法 ID。
查看 jvmti.h 标头,我发现只有这个结构处理参数,但没有值。
如何从回调中获取参数值?