JPDA 架构研究7 - Agent利用环境指针访问VM(线程组管理篇)


引入:设计模式

上篇文章中咱们讨论了Agent利用环境指针访问VM的线程操做,这里讨论线程组操做。jvm


分类3:线程组操做ide

a.GetTopThreadGroups.让Agent获取VM中的全部全局的线程组。函数

jvmtiError
GetTopThreadGroups(jvmtiEnv* env,
            jint* group_count_ptr,
            jthreadGroup** groups_ptr)

函数会返回全局的线程组的数量和线程组的列表。线程


b.GetThreadGroupInfo。获取某个线程组的信息。设计

typedef struct {
    jthreadGroup parent;
    char* name;
    jint max_priority;
    jboolean is_daemon;
} jvmtiThreadGroupInfo;
jvmtiError
GetThreadGroupInfo(jvmtiEnv* env,
            jthreadGroup group,
            jvmtiThreadGroupInfo* info_ptr)

从这里能够看出,它会包含线程组的父亲,线程组名字(UTF-8格式),最大优先级,是否守护线程组等信息。指针


c.GetThreadGroupChildren.获取某指定线程组的孩子们。it

jvmtiError
GetThreadGroupChildren(jvmtiEnv* env,
            jthreadGroup group,
            jint* thread_count_ptr,
            jthread** threads_ptr,
            jint* group_count_ptr,
            jthreadGroup** groups_ptr)

由于线程组和线程的关系也遵照设计模式中的Composite Design Pattern.因此某个线程组的孩子能够是子线程组,也能够是一些活着的子线程。因此这里能够看出,它会返回子线程的数量,子线程列表,子线程组数量,子线程组列表。io

相关文章
相关标签/搜索