代码改变世界

随笔档案-2010年10月

关键字volatile的作用

2010-10-22 12:00 by RayLee, 453 阅读, 收藏,
摘要: 很多人可能对关键字volatile的作用不太清楚。首先,该关键字是用在多线程环境中的,今天从别人的文章中找到了一个例子说明,以帮助理解。 The volatile keyword was introduced to the language as a way around optimizing compilers. Take the following code for example: An optimizing compiler might decide that the body of the if statement would never execute, and not eve 阅读全文

JNI系列(4):如何访问自定义类对象

2010-10-21 13:51 by RayLee, 3776 阅读, 收藏,
摘要: JNI规范中仅仅给出了String,Array两种引用类型的访问,那么如果使用了自定义的类,在JNI中该如何访问?如以下代码所示,用户自定义了Student类,创建了实例student,并希望在JNI函数中修改实例student的成员age。 对应的JNI函数:其实思路是一样的,先找到Student类,然后找到’age’的fieldID。 阅读全文

JN系列(3):如何得到JavaVM,JNIEnv接口

2010-10-21 11:49 by RayLee, 11786 阅读, 收藏,
摘要: 在系列(1)中讲到,Java与native code的操作有两种方式:(1)在Java中加载动态链接库(2)使用JNI Invocation inteface,在native code中创建JVM JavaVM接口 第一种方式,在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数)。第一个参数会传入JavaVM指针。 第二种方式,在native code中调用JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args)可以得到JavaVM指针。 两种情况下,都可以用全局变量, 阅读全文

JNI系列(2):jstring操作

2010-10-21 10:33 by RayLee, 6297 阅读, 收藏,
摘要: 使用JNI时,最常见的操作是将jstring转换成UTF字符串。JNI提供了几个转换函数:GetStringUTFChars, GetStringUTFRegion。 GetStringUTFChars返回一个指向UTF字符串的指针,该函数会分配内存空间存储该字符串,因此使用完后一定要记得调用对应的释放函数ReleaseStringUTFChars释放分配的空间。 GetStringUTFRegion将UTF字符串存储到预分配的内存空间。相比GetStringUTFChars,它没有重新分配内存空间,因此也无需释放。 开发时,根据需要选择适当的函数。 Android源代码大量使用Get 阅读全文

JNI系列(1):基础篇

2010-10-21 08:30 by RayLee, 2071 阅读, 收藏,
摘要: 由于现在的项目及以后的项目将大量使用JNI调用,故打算做一则系列文章供参考及讨论。本文是关于JNI的基础知识。 JNI是Java代码与本地代码交互的桥梁,有两种方式:(1)在Java中加载动态链接库 (2)使用JNI Invocation inteface,在native code中创建JVM 这种交互是双向的,即Java可以访问本地代码中的变量和函数,本地代码也可以访问Java类的成员和成员方法。 JNI规范给出了一个简单的例子,说明在Windows和Soloris上如何编译,生成及运行JNI代码。 在Windows上,使用cl编译器把本地代码生成dll文件。Soloris上,使用c 阅读全文