- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现Java Attach API可以加载javaagent,如下代码:
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
import java.util.List;
public class ListVM{
public static void main(String[] args){
List<VirtualMachineDescriptor> vmList = VirtualMachine.list();
for(VirtualMachineDescriptor vm : vmList){
System.out.println("name: " + vm.displayName() + " id :" + vm.id());
try{
VirtualMachine vm0 = VirtualMachine.attach(vm.id());
// load agent, agnet class's agentmain will be invoked.
vm0.loadAgent("/root/tmp/ChinaAgent.jar");
System.out.println("Load agent done.");
vm0.detach();
}catch(Exception e) {
System.out.println("exception : " + e.getMessage());
}
}
}
}
语句:vm0.loadAgent("/root/tmp/ChinaAgent.jar");
加载代理jar文件。
但是代理的代码只会运行一次,
所以我猜代理 jar 只加载了一次,这意味着 Jvm 阻止多次加载代理。
这是事实吗?为什么?
希望能有一些代码来证明这一点!
谢谢!
最佳答案
当您调用 loadAgent
时,代理 jar 会运行一次。 agentmain
Agent-Class
指定的代理类的方法调用 JAR list 中的属性。
该类实际上加载一次,除非您做了一些优化来卸载类。因此,如果您在同一个 jar 上多次调用 loadAgent,则不会重新加载类,而是 Agent_OnAttach
(agentmain) 可能会被多次调用。实际上它是特定于平台的并且取决于 JVM 实现。
loadAgent
方法调用 loadAgentLibrary
调用 Agent_OnAttach
这是特定于平台的
引用文献:
jdk\src\windows\native\sun\tools\attach\WindowsVirtualMachine.c
文件关于Java VirtualMachine.loadAgent 仅一次加载代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26275503/
我正在尝试阻止(或至少检测)其他程序注入(inject)我的程序。他们是这样做的: VirtualMachineDescriptor vmd = /* my program */; VirtalMac
当我调用 VirtualMachine.list() 时,当我在 eclipse 和 jdk 上时它工作正常。但是一旦我更改为 jre,或者我在 eclipse 中尝试我的应用程序,此方法似乎每次都会
我发现Java Attach API可以加载javaagent,如下代码: import com.sun.tools.attach.VirtualMachine; import com.sun.too
我正在使用 Java Attach API 连接到本地 JVM。我正在做类似下面的事情 VirtualMachine vm = VirtualMachine.attach("8400"); Prope
我在包 com.sun.jdi 中找到了一些专为调试而设计的类,例如 VirtualMachine , 但我不能使用它,因为 Sun JDK7 中似乎不存在包。 如何使用这个包? 顺便说一句。 lib
由于我添加了自定义脚本扩展 (CompDesc),因此我无法部署此嵌套模板。尝试部署时出现以下错误提示: 错误:代码=InvalidTemplate;消息 = 部署模板验证失败:“第 207 行和第
每当我使用 Java Attach API 时,都不会返回有效的 VirtualMachines。我尝试遍历 VirtualMachine.list() 返回的列表,每当我认为我已经获得进程 ID 时
在我的 Android 应用程序中,我想测试一些配置然后加载我的广告的 Activity 方法。 我在我的 MainActivity 上使用 ActivityInstrumentationTestCa
我正在尝试部署 hawtio-default-offline-1.3.1.war(到 JBoss EAP 6.2 中),我在日志中看到此消息: 10:16:07,988 警告 [io.hawt.jvm
我正在调用 azure /providers/Microsoft.Compute/virtualMachines REST API。我需要为此 API 实现分页。根据 Azure 文档,在响应中使用
我正在调用 azure /providers/Microsoft.Compute/virtualMachines REST API。我需要为此 API 实现分页。根据 Azure 文档,在响应中使用
我如何使用 sun.tools.attach.HotSpotVirtualMachine和 com.sun.tools.attach.VirtualMachine在 JDK1.5 中? 最佳答案 这些
经过this之后通过讨论,我相信附加到同一虚拟机的选项默认情况下已在 OpenJDK11 中禁用。 我正在尝试将 java 代理升级到 OpenJDK11,在测试用例中,当调用 VirtualMach
使用 Visual Studio 2015 Community edition 它会针对以下内容标记错误: { "type": "Microsoft.Compute/virtualMachi
当我尝试运行我的应用程序时,出现此错误: Error:Execution failed for task ':app:dexDebug'. com.android.ide.common.process
我是一名优秀的程序员,十分优秀!