文档章节

java jni stack

木辰寿
 木辰寿
发布于 2015/02/27 18:46
字数 167
阅读 59
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

 JNIEnv *env = NULL;
  jint result = -1;
  if ((*vm)->GetEnv(vm,(void**)&env,JNI_VERSION_1_4)) {
   return -1;
  }
  result = JNI_VERSION_1_4;
  jclass threadcls = (*env)->FindClass(env, "java/lang/Thread");
  jclass StackTraceElement =(*env)->FindClass(env, "java/lang/StackTraceElement");
  jmethodID Thread_currentThread = (*env)->GetStaticMethodID(env, threadcls, "currentThread","()Ljava/lang/Thread;");
  jobject currentThread = (*env)->CallStaticObjectMethod(env, threadcls,Thread_currentThread);
LOG_DEBUG("song", "jni 1");
  jmethodID Thread_getStackTrace = (*env)->GetMethodID(env, threadcls, "getStackTrace","()[Ljava/lang/StackTraceElement;");
  jobjectArray stes = (*env)->CallObjectMethod(env,  currentThread, Thread_getStackTrace);
  jsize stes_length = (*env)->GetArrayLength(env, stes);
  jmethodID StackTraceElement_getClassName = (*env)->GetMethodID(env, StackTraceElement,"getClassName","()Ljava/lang/String;");
  LOG_DEBUG("song", "jni 2 %p %d", stes, stes_length);
  // jobject j_class_name = (*env)->CallObjectMethod(env, );
  int i= 0;
  for (i=0; i<stes_length; i++) {
   
   jobject j_class_name = (*env)->CallObjectMethod(env, (*env)->GetObjectArrayElement(env, stes, i), StackTraceElement_getClassName);
   char *class_name = (*env)->GetStringUTFChars(env, j_class_name, NULL);
   LOG_DEBUG("song", "jni 3 %s", class_name);
   (*env)->ReleaseStringUTFChars(env, j_class_name, class_name);
   (*env)->DeleteLocalRef(env, j_class_name);
  }
  (*env)->DeleteLocalRef(env, threadcls);
  (*env)->DeleteLocalRef(env, StackTraceElement);
  (*env)->DeleteLocalRef(env, currentThread);

  (*env)->DeleteLocalRef(env, stes);

  return result;

© 著作权归作者所有

木辰寿
粉丝 5
博文 20
码字总数 2815
作品 0
昌平
程序员
私信 提问
加载中

评论(0)

Android NDK c创建新的线程

在jni的c/c++层创建一个新的线程只需要3步: 1.导入库 #include<pthread.h> 2.写好线程要做的事 void run_1(void); void run_1(void args){ ... } 3.调用方法 pthreadt thread1; pthreadcre......

whoisliang
2018/12/03
33
0
Java面试题:哪些对象可以作为GC Roots?

Java是托管运行对语言,内存对分配和回收是自动进行对。 那么JVM如何确定哪些内存可以被回收呢?这里面是有特定对算法的。 1、GC自动垃圾收集? Java虚拟机(JVM)垃圾回收GC任务自动确定Jav...

徐雷frank
04/07
0
0
Java运行状态分析3: 线程堆栈信息分析

背景 当CPU飙升的时候,我们需要知道CPU此时在干嘛,具体什么进程、什么线程让CPU飙升 线程是操作系统能够进行运算调度的最小单位,跟踪占用CPU高的线程 可以了解线程的运行情况,定位可能或...

indi_yugj
2019/07/17
94
0
javah命令 C Header and Stub File Generator

JDK内置工具使用 一、javah命令(C Header and Stub File Generator) 二、jps命令(Java Virtual Machine Process Status Tool) 三、jstack命令(Java Stack Trace) 四、jstat命令(Java Virtual......

osc_vsdge2u3
2019/01/31
2
0
Garbage Collection Roots

Garbage Collection Roots — The Source of All Object Trees Every object tree must have one or more root objects. As long as the application can reach those roots, the whole tre......

秋风醉了
2015/11/19
83
0

没有更多内容

加载失败,请刷新页面

加载更多

二、netcore跨平台之 Linux部署nginx代理webapi

原文: 二、netcore跨平台之 Linux部署nginx代理webapi 上一章,我们讲了在linux上安装netcore环境,以及让netcore在linux上运行。 这一章我们开始讲在linux上配置nginx,以及让nginx反向代理...

osc_jo2m8l1r
29分钟前
17
0
CAD怎么转PDF文件?使用这款编辑器一键转换、批量转换

CAD怎么转换成PDF文件呢?小伙伴们不妨使用这款CAD编辑器,把CAD文件一键、批量转换成PDF文件哦。 有许多小伙伴应该都知道,为了满足各种学习、工作的需求,文件之间是经常需要相互转换格式的...

真不莲
29分钟前
19
0
详解Microsoft.AspNetCore.CookiePolicy

原文: 详解Microsoft.AspNetCore.CookiePolicy 详解Asp.Net Core中的Cookie策略 目录 详解Asp.Net Core中的Cookie策略 功能介绍 使用Cookie策略 从UseCookiePolicy方法入手 实现IResponseCo...

osc_0vd38ylb
30分钟前
16
0
怎么找到自己收藏过的思维导图模板?迅捷画图教你详细步骤!

怎么找到自己收藏过的思维导图模板?大家在刷视频的时候,遇到自己喜欢的视频,都会点个微信或者关注,用电脑看网页的时候,遇到有意思的网站,也会点击添加书签进行收藏,方便以后阅读或者是...

赛利亚大姐大
31分钟前
10
0
Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一)

原文: Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一) Microsoft.AspNetCore.Authentication.Cookies从入门到精通 (一) 目录 Microsoft.AspNetCore.Authentication.Cook......

osc_t5nbj8ds
32分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部