标签: jvmti

使用JVMTI测量方法执行

使用JVMTI提供的MethodEntryMethodExit事件挂钩,我如何测量在Java中执行的方法的时间?

简单的说法就是:time2 - time1但我看到的问题是,如何区分不同的方法?有一个methodID,但递归调用呢?打开后方法何时关闭?

我应该比较堆栈跟踪吗?什么是有意义的数据结构来跟踪输入的方法?就像是Map<StackTrace,Time>?

java jvmti

1
推荐指数
1
解决办法
577
查看次数

困惑的是jvmti对象分配回调行为

任何人都可以向我解释为什么我可以在jvm分配一些java对象时获得回调,而不是其他的?这是我在做的事情:

static jvmtiCapabilities    capa;
static jvmtiEnv*            jvmti                   = NULL;
static const char*          fileName                = "C:\\temp\\ObjectInitCallbackDump.txt";
static ofstream             outFileStream;

void JNICALL callbackObjectAllocation ( jvmtiEnv*   jvmti_env, 
                                        JNIEnv*     jni_env,
                                        jthread     thread,
                                        jobject     object,
                                        jclass      object_klass,
                                        jlong       size            )
{
    char*       generic_ptr_class;
    char*       class_name;
    jvmtiError  error;

    error = jvmti_env->GetClassSignature(object_klass, &class_name, &generic_ptr_class);
    if (check_jvmti_error(jvmti_env, error, "Failed to get class signature")) {
        return;
    }
    outFileStream << class_name << std::endl;
}

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
    jint                result;
    jvmtiError          error;
    jvmtiEventCallbacks callbacks; …
Run Code Online (Sandbox Code Playgroud)

java jvmti

1
推荐指数
1
解决办法
2464
查看次数

如何使用 JNI+JVMTI 捕获 JIT 的去优化事件,例如“unstable_if”

我真的很想知道如何捕捉 JIT 的去优化事件。
今天,我读到了 Andrei Pangin 的精彩回答当忙碌的 Java 线程绑定到物理核心时,是否会因为到达代码中的新分支而发生上下文切换?并再次考虑。

我想用 JNI+JVMTI 捕捉 JIT 的去优化事件,如“unstable_if、class_check 等”,然后向我的监控系统或其他任何东西发送警报。

是否可以?它对 JVM 的性能有什么影响?

java jit jvm jvm-hotspot jvmti

1
推荐指数
1
解决办法
195
查看次数

JMVTI:Could not find agent library

I wrote an agent for Java which does nothing just exports two methods, just to check if it loaded on JVM start or not. Built it with mingw-w64 4.8.4 (using JetBrains CLion). Windows 7 x64.

JNIEXPORT jint JNICALL
Agent_OnLoad(JavaVM *jvm, char *options, void *reserved){
  return JNI_OK;
}

JNIEXPORT void JNICALL
Agent_OnUnload(JavaVM *vm){}
Run Code Online (Sandbox Code Playgroud)

Got an error running

java -agentlib:"C:\JMVAgent\agent.dll"

Error occurred during initialization of VM
Could not find agent library libSampleAgent.dll on the library path, 
with error: Can't find dependent libraries …
Run Code Online (Sandbox Code Playgroud)

java jvm jvmti

0
推荐指数
1
解决办法
8382
查看次数

如何使用Hotspot动态附加机制访问JVM内部数据结构?

根据OpenJDK 的网站,可以将线程附加到 Hotspot(动态附加 API),该线程可以收集有关它的信息。我在互联网上找不到任何关于如何获取有关 Hotspot 内部数据结构的信息,例如操作数堆栈或字节码解释器的状态(以了解当前正在执行哪个字节码)或检索当前堆栈帧等的材料。

另外,如果动态连接 API 无法实现这一点,那么如何使用可服务性代理来完成此操作?我在互联网上找到的唯一示例是来自 Github 的要点,它展示了如何附加到正在运行的 JVM 并获取某些字段的值。那么如何访问JVM中的上述内部数据结构呢?

java debugging jvm jvm-hotspot jvmti

0
推荐指数
1
解决办法
1554
查看次数

标签 统计

java ×5

jvmti ×5

jvm ×3

jvm-hotspot ×2

debugging ×1

jit ×1