java native调用
来源:互联网 发布:睡别人女朋友 知乎 编辑:程序博客网 时间:2024/06/05 11:45
- Object
Object
- registerNatives()
- getClass()
- hashCode()
- equals()
- clone()
- toString()
- notify()
- notifyAll()
- wait(long timeout)
- wait(long timeout, int nanos)
- wait()
- finalize()
Object就这几个方法,其中除equals和toString,其他都是native方法.
本文就以Object来探讨下java的native,源码基于openjdk7
Object native方法的声明在openjdk/jdk/src/share/native/java/lang/Object.c中
static JNINativeMethod methods[] = { {"hashCode", "()I", (void *)&JVM_IHashCode}, {"wait", "(J)V", (void *)&JVM_MonitorWait}, {"notify", "()V", (void *)&JVM_MonitorNotify}, {"notifyAll", "()V", (void *)&JVM_MonitorNotifyAll}, {"clone", "()Ljava/lang/Object;", (void *)&JVM_Clone},};
JNINativeMethod的结构体如下:
typedef struct { char *name; char *signature; void *fnPtr;} JNINativeMethod;
- name Object的方法名称
- signature 方法签名
- fnPtr native实现的函数指针
对应的native实现在openjdk/hotspot/src/share/vm/prims/jvm.cpp
hashCode():
JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle)) JVMWrapper("JVM_IHashCode"); // as implemented in the classic virtual machine; return 0 if object is NULL return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;JVM_END
wait():
JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms)) JVMWrapper("JVM_MonitorWait"); Handle obj(THREAD, JNIHandles::resolve_non_null(handle)); assert(obj->is_instance() || obj->is_array(), "JVM_MonitorWait must apply to an object"); JavaThreadInObjectWaitState jtiows(thread, ms != 0); if (JvmtiExport::should_post_monitor_wait()) { JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms); } ObjectSynchronizer::wait(obj, ms, THREAD);JVM_END
…
JVM_ENTRY的结构体定义在openjdk/hotspot/src/share/vm/runtime/interfaceSupport.hpp
#define JVM_ENTRY(result_type, header) \extern "C" { \ result_type JNICALL header { \ JavaThread* thread=JavaThread::thread_from_jni_environment(env); \ ThreadInVMfromNative __tiv(thread); \ debug_only(VMNativeEntryWrapper __vew;) \ VM_ENTRY_BASE(result_type, header, thread)
JVM_END
#define JVM_END } }
- Object
Object
- registerNatives()
- getClass()
- hashCode()
- equals()
- clone()
- toString()
- notify()
- notifyAll()
- wait(long timeout)
- wait(long timeout, int nanos)
- wait()
- finalize()
Object就这几个方法,其中除equals和toString,其他都是native方法.
本文就以Object来探讨下java的native,源码基于openjdk7
Object native方法的声明在openjdk/jdk/src/share/native/java/lang/Object.c中
static JNINativeMethod methods[] = { {"hashCode", "()I", (void *)&JVM_IHashCode}, {"wait", "(J)V", (void *)&JVM_MonitorWait}, {"notify", "()V", (void *)&JVM_MonitorNotify}, {"notifyAll", "()V", (void *)&JVM_MonitorNotifyAll}, {"clone", "()Ljava/lang/Object;", (void *)&JVM_Clone},};
JNINativeMethod的结构体如下:
typedef struct { char *name; char *signature; void *fnPtr;} JNINativeMethod;
- name Object的方法名称
- signature 方法签名
- fnPtr native实现的函数指针
对应的native实现在openjdk/hotspot/src/share/vm/prims/jvm.cpp
hashCode():
JVM_ENTRY(jint, JVM_IHashCode(JNIEnv* env, jobject handle)) JVMWrapper("JVM_IHashCode"); // as implemented in the classic virtual machine; return 0 if object is NULL return handle == NULL ? 0 : ObjectSynchronizer::FastHashCode (THREAD, JNIHandles::resolve_non_null(handle)) ;JVM_END
wait():
JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms)) JVMWrapper("JVM_MonitorWait"); Handle obj(THREAD, JNIHandles::resolve_non_null(handle)); assert(obj->is_instance() || obj->is_array(), "JVM_MonitorWait must apply to an object"); JavaThreadInObjectWaitState jtiows(thread, ms != 0); if (JvmtiExport::should_post_monitor_wait()) { JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms); } ObjectSynchronizer::wait(obj, ms, THREAD);JVM_END
…
JVM_ENTRY的结构体定义在openjdk/hotspot/src/share/vm/runtime/interfaceSupport.hpp
#define JVM_ENTRY(result_type, header) \extern "C" { \ result_type JNICALL header { \ JavaThread* thread=JavaThread::thread_from_jni_environment(env); \ ThreadInVMfromNative __tiv(thread); \ debug_only(VMNativeEntryWrapper __vew;) \ VM_ENTRY_BASE(result_type, header, thread)
JVM_END
#define JVM_END } }
阅读全文
0 0
- Java调用Native方法
- Native调用Java模块
- java native调用
- 使用Native调用Java Native API
- JAVA中native方法调用
- JAVA中native方法调用
- native activity 下调用java
- Java native 本地方法调用
- Android NDK- native调用Java
- java native interface(java 本地方法调用)
- java native interface JNI 调用Java方法
- java本地调用Native(源代码)
- java本地调用-Native(源代码)
- java 中本地方法调用---native关键字
- JAVA调用固有方法---native关键字
- [JNI] java 多线程调用native 方法
- JNI调用(Java Native Interface)
- Java 调用本地Native接口指引
- Linux下python安装pip
- CF--518A--Strange Addition
- 25:螺旋加密(1.8编程基础之多维数组)
- UIMenuController功能扩展
- 2017.9.18
- java native调用
- 最长公共子序列Lcs---51--Nod
- hdu6214—Smallest Minimum Cut(最小割的最少割边)
- Leetcode 169 & 229
- 解决Winform程序在不同分辨率系统下界面混乱
- E:奇怪的奖励规则
- Spark Streaming中的操作函数分析
- 机器学习_支持向量机
- JavaScripts 数组