当前位置: 首页 > 面试题库 >

如何在Eclipse RCP应用程序中使用java.lang.instrument?

太叔何平
2023-03-14
问题内容

为了使用JDK 5中引入的检测功能,可以使用-javaagent传递给JVM
的标志。这会将Instrumentation类的实例注入到静态premain方法中。例如在这样的类中:

public class MyClass {
    public static Instrumentation inst;
    public static void premain(String options, Instrumentation inst) {
        MyClass.inst = inst;
    }
}

使用适当的清单文件,可以按以下方式运行它:

 java -javaagent:myfiles.jar SomeClass

然后main从调用premain方法SomeClass。Java.SizeOf项目中使用此方法来猜测Java对象的近似大小。

好的,现在在Eclipse
RCP中,每个捆绑软件都有自己的类加载器。这意味着我们存储在MyClass中的静态Instrumentation对Eclipse应用程序不可见。javaagent使用一个类加载器,Eclipse捆绑包中加载另一个。当我们访问MyClass.inst从内插件是null,因为
类是不一样的类作为一个javaagent加载,并呼吁premain对。

有关可能解决方案的其他线索是rcp邮件列表上的该线程。但没有定论。

有什么办法可以解决此问题?将Eclipse-BuddyPolicy在eclipsezone文章听起来不错暗示。我试过了:

Eclipse-BuddyPolicy: app

在我的插件中没有运气。我需要类似的东西Eclipse-BuddyPolicy: javaagent。有任何想法吗?


问题答案:

我认为最简单的解决方案是使用全局属性对象。先将工具对象存储为全局属性,然后从任何地方访问它(属性对象在所有类加载器中都是相同的):

[编辑:已更新]

public class MyClass {
    private static final String KEY = "my.instrumentation";
    public static void premain(String options, Instrumentation inst) {
        Properties props = System.getProperties();
        if(props.get(KEY) == null)
           props.put(KEY, inst);
    }

    public static Instrumentation getInstrumentation() { 
       return System.getProperties().get(KEY);
    }
}


 类似资料:
  • 问题内容: 我有一个Swing应用程序,我希望将其从意大利面条转换为对Guice使用依赖项注入。使用Guice提供诸如配置和任务队列之类的服务的过程非常好,但是我现在是从应用程序的GUI开始的,不确定如何进行。 该应用程序基本上是,在中带有一堆标签。每个选项卡都是一个单独的子类,该子类列出了各种组件,并且需要服务才能在按下某些按钮时执行操作。 在当前应用程序中,这看起来像这样: 显然,这并不完全遵

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我正在用c开发一个应用程序,我想使用solr来索引sqlite数据库,我在网上搜索了一下,发现我需要使用JNI:http://randr . svbtle . com/experiment-with-embedded-Solr-in-Java-and-c,但是我发现jar有很多问题(我使用了\solr-4.9.0\dist\solrj-lib和\solr-4.9.0\dist和\solr-4.9.

  • 我试图理解我们什么时候需要使用这个应用程序。在我们的node Express中使用 当我在网上搜索时,我在reddit上偶然发现了这个答案,它说明了应用程序之间的区别。获取和应用程序。使用 在此基础上,我总结了以下几点。 充当超级路由或中间件?这意味着它在? 此外,如果有人能添加更多关于app.use.的信息/练习,我将不胜感激

  • 问题内容: 我正在尝试将Hibernate用于多线程应用程序,其中每个线程都检索一个对象并将其插入表中。我的代码如下所示。我每个线程都有本地hibernate会话对象,在每个InsertData中,我都执行beginTransaction和commit。 我面临的问题是很多次我收到“ org.hibernate.TransactionException:不支持嵌套事务” 由于我是hibernate

  • 问题内容: 是否有一种实际的方法可以在PHP中实现多线程模型,无论是真正的还是仅对其进行仿真。一段时间以前,建议您可以强制操作系统加载PHP可执行文件的另一个实例并处理其他同时进行的进程。 这样做的问题是,当PHP代码完成执行PHP实例后,它仍保留在内存中,因为无法从PHP中杀死它。因此,如果您正在模拟多个线程,则可以想象会发生什么。因此,我仍在寻找一种可以在PHP中有效完成或模拟多线程的方法。有