2025年OpenJDK源码赏析之六(JNI数据类型)

OpenJDK源码赏析之六(JNI数据类型)JNI 有两种基本数据类型基本数据类型和引用数据类型 基本数据类型 在 jnt h 中可以找到 如果没在 jni md 中定义好的话 ifndef JNI TYPES ALREADY DEFINED IN JNI MD H 就使用下面的定义 typedef unsigned char jboolean typedef unsigned short

大家好,我是讯享网,很高兴认识大家。

JNI有两种基本数据类型基本数据类型和引用数据类型

基本数据类型


讯享网

在jnt.h中可以找到

//如果没在jni_md.中定义好的话 #ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H //就使用下面的定义 typedef unsigned char jboolean; typedef unsigned short jchar; typedef short jshort; typedef float jfloat; typedef double jdouble; typedef jint jsize;

讯享网

找到jnt_md.h中的数据定义

 在jnt_md.h中找到如上定义,根据环境选择数据类型,根据X86架构找到jni_x86.h文件

讯享网#ifndef _JAVASOFT_JNI_MD_H_ #define _JAVASOFT_JNI_MD_H_ #if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE) // Note: please do not change these without also changing jni_md.h in the JDK // repository #ifndef __has_attribute #define __has_attribute(x) 0 #endif #if (defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ > 2))) || __has_attribute(visibility) #define JNIEXPORT __attribute__((visibility("default"))) #define JNIIMPORT __attribute__((visibility("default"))) #else #define JNIEXPORT #define JNIIMPORT #endif #define JNICALL typedef int jint; #if defined(_LP64) typedef long jlong; #else typedef long long jlong; #endif #else #define JNIEXPORT __declspec(dllexport) #define JNIIMPORT __declspec(dllimport) #define JNICALL __stdcall typedef int jint; typedef __int64 jlong; #endif typedef signed char jbyte; #endif /* !_JAVASOFT_JNI_MD_H_ */

引用数据类型

方法签名时用到的公共体类型

typedef union jvalue { jboolean z; jbyte b; jchar c; jshort s; jint i; jlong j; jfloat f; jdouble d; jobject l; } jvalue;

属性ID和方法ID的定义

讯享网struct _jfieldID; typedef struct _jfieldID *jfieldID; struct _jmethodID; typedef struct _jmethodID *jmethodID;

四种不同引用类型的定义

/* Return values from jobjectRefType */ typedef enum _jobjectType { JNIInvalidRefType = 0, JNILocalRefType = 1, JNIGlobalRefType = 2, JNIWeakGlobalRefType = 3 } jobjectRefType;

分别为JNIInvalidRefType(无效引用)、JNILocalRefType(本地引用)、JNIWeakGlobalRefType(弱全局引用)和JNIGlobalRefType(全局引用)的枚举类型

JNI错误类型的定义

讯享网/* * jboolean constants */ #define JNI_FALSE 0 #define JNI_TRUE 1 /* * possible return values for JNI functions. */ #define JNI_OK 0 /* success */ #define JNI_ERR (-1) /* unknown error */ #define JNI_EDETACHED (-2) /* thread detached from the VM */ #define JNI_EVERSION (-3) /* JNI version error */ #define JNI_ENOMEM (-4) /* not enough memory */ #define JNI_EEXIST (-5) /* VM already created */ #define JNI_EINVAL (-6) /* invalid arguments */ /* * used in ReleaseScalarArrayElements */ #define JNI_COMMIT 1 #define JNI_ABORT 2

小讯
上一篇 2025-01-11 11:21
下一篇 2025-02-28 19:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24150.html