文档章节

java jni stack

木辰寿
 木辰寿
发布于 2015/02/27 18:46
字数 167
阅读 12
收藏 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
昌平
程序员
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
0
0
用 JNI 进行 Java 编程(1)

本教程是关于什么的? Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java Software Development Kit (SDK))的一部分。JNI 允许 Java 代码使...

Jerikc
2012/10/08
0
0
native关键字初识--java调用非java代码的接口

Java基础知识——JNI入门介绍(上) Java™ 本机接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语言编写的代码相集成。如果您希望利用已有的代...

成长中的菜鸟
2015/02/10
0
0
深入了解android平台的jni---本地多线程调用java代码

一、jni调用java对象 JNI提供的功能之一是在本地代码中使用Java对象。包括:创建一个java类对象和通过函数传递一个java对象。创建一个java类对象,首先需要得到得到使用FindClass/GetObject...

mfcai
2013/07/17
0
0
Android JNI学习(三)——Java与Native相互调用

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
2
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
5
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
今天
2
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部