当前位置: 首页 > 知识库问答 >
问题:

比JVMTI GetTag更快的获取对象标记的替代方法

滑令
2023-03-14
jlong JvmtiTagMap::get_tag(jobject object) {
  MutexLocker ml(lock());

  // resolve the object
  oop o = JNIHandles::resolve_non_null(object);

  // for Classes get the tag from the klassOop
  return tag_for(this, klassOop_if_java_lang_Class(o));
}
    null

getTag在当前的JVMTI代理中已经被大量使用,所以我正在寻找一种更快的方法来获取标记或实现我自己的机制,同时保持在C端。

共有1个答案

景永望
2023-03-14

当您使用来自C的Java对象时,您基本上受到JNI和JVMTI函数的限制。而且他们确实有不可避免的开销。

恐怕没有其他合法的方法可以从本机代理访问Java对象。特别是,处理裸体是非法的--这只是一个随时可能失效的原始指针,因为对象可以移动。

然而,只要JVM在移动对象时更新相应的OOP,它就可以处理OOP,甚至可以将对象地址用作jvmtitagmap中的键。而HotSpot JVM确实做到了这一点,请参阅jvmtitagmap::do_weak_oops。

 类似资料:
  • 问题内容: 我知道这个话题已经解决了上千次。但是我找不到解决办法。 我正在尝试计算列表(df2.list2)的列中出现列表(df1.list1的每一行)的频率。所有列表仅包含唯一值。List1包含约300.000行,list2包含30.000行。 我有一个有效的代码,但是它的运行速度非常慢(因为我使用的是迭代程序)。我也尝试过itertuples(),但它给了我一个错误(“要解压缩的值太多(预期2

  • 问题内容: 为了提高其性能,我一直在使用VisualVM采样器对我的一个应用程序进行性能分析,最小采样周期为20ms。根据探查器,主线程在该方法中花费了将近四分之一的CPU时间。 我正在与该模式一起使用,以将数字“转换” 为正好有六个十进制数字的字符串表示形式。我知道这种方法相对昂贵并且 被 多次调用,但是我对这些结果感到有些惊讶。 这种采样分析器的结果在多大程度上准确?我将如何验证它们-最好不借

  • 问题内容: replace方法返回一个字符串对象而不是替换给定字符串的内容这一事实有点让人费解(但是,当您知道字符串在Java中是不可变的时,这是可以理解的)。通过在某些代码中使用深度嵌套的替换,我的性能受到了重大影响。有什么我可以替换的东西可以使它更快吗? 问题答案: 这就是StringBuilder的目的。如果要进行很多操作,请在上进行操作,然后在需要时将其转换为。 因此描述: “可变的字符序

  • 问题内容: 我有一个3d数组,其中填充了从0到N的整数。我需要一个与该数组等于1、2、3,… N的位置对应的索引列表。我可以使用np.where进行如下操作: 但这很慢。根据这个问题 快速python numpy在哪里功能? 应该可以大大加快索引搜索的速度,但是我无法将那里提出的方法转移到我获取实际索引的问题上。加快上述代码的最佳方法是什么? 作为附加组件:我想稍后存储索引,使用np.ravel_

  • 我打算写一个实时合作多人游戏。目前我正处于研究阶段。我已经写了一个基于回合的游戏,它使用了网络插座,工作正常。 然而,我还没有尝试过用这种技术写一个实时游戏。我的问题是关于网络套接字的。有没有替代方法来处理(浏览器)客户端之间的通信?我的想法是在每个客户端都有游戏状态,并且使用服务器作为中介/同步工具,只向客户端发送增量。 我主要关心的是网络速度。我希望客户端能够尽可能快地接收到彼此的动作,这样我

  • 问题内容: 我已经使用了旧的过时了太久了。 性能不是很好。它是: 昂贵,因为它为每个条目创建一个新对象。 速度慢,因为您必须等待阵列完成才能开始处理。 非常糟糕,尤其是如果您只需要处理部分内容时。 有哪些选择? 问题答案: Java 7的软件包可用于增强性能。 迭代器 该接口可用于遍历目录,而无需将其内容预加载到内存中。当旧的API在文件夹中创建一个包含所有文件名的数组时,新方法将在迭代过程中遇到